Logo

Nginx + fpm-php + mariadb + apc в Ubuntu server

Apache хороший сервер но есть и более эфективные сервера. В этой статье расмотрим один из вариантов замены класической связки apache+cgi-php+mysql на nginx+fpm-php+mariadb и ещё добавим пару акселераторов memcached, apc. Ставить будем на примере ubuntu server 12.04 но с минимальными изменениями можно использовать и debian.

Установка mariadb

Начнем с простого. Mariadb это ответвление (fork) от mysql, причем сделал его автор оригинального mysql после того как ушел из oracle которая поглотила sun. На свободе неограниченный корпоративными рамками mariadb получила второе рождение. Однако главное что несмотря на то что движок был основательно переписан и оптимизирован, была сохранена полная совместимость с mysql что позволяет в большинстве случаев безболезненно перейти на mariadb.

Варианты рипозиториев под разные дистрибутивы можно найти по ссылке https://downloads.mariadb.org/mariadb/repositories/

В нашем случае добавляем новый репозиторий:

sudo apt-get install python-software-properties
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com CBCB082A1BB943DB
sudo add-apt-repository 'deb http://ftp.osuosl.org/pub/mariadb/repo/10.0/ubuntu precise main'

И ставим как обычно в процессе нужно ввести пороль суперпользователя (root) для доступа к базе.

sudo apt-get update
sudo apt-get install mariadb-server mariadb-client

Затем при желании можете изменить настройки в /etc/mysql/my.conf и перезапустить

/etc/init.d/mysql restart

Как видете даже имена демонов пока остались неизменными для совместимости со скриптами которые остались в наследство от mysql.

Установка Nginx

Теперь поставим nginx с php.

Пакеты под разные дистрибутивы можно взять здесь http://nginx.org/en/download.html

Добавим ещё один репозиторий:

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com ABF5BD827BD9BF62
sudo add-apt-repository 'deb http://nginx.org/packages/ubuntu/ precise nginx'

Теперь можно ставить:

sudo apt-get update
sudo apt-get install php-apc php-pear php5-cli php5-common php5-curl php5-fpm php5-gd php5-mysql nginx

В файле /etc/php5/fpm/php.ini раскомментируем строчку:

cgi.fix_pathinfo = 1

В файле /etc/php5/fpm/pool.d/www.conf меняем порт на unix сокет:

listen = /var/run/php5-fpm.sock

И добавим модуль для кэширования данных в оперативной памяти

sudo apt-get install memcached php5-memcached

Открываем файл /etc/php5/conf.d/apc.ini и добавляем настройки на свое усмотрение:

extension=apc.so
apc.enabled=1
apc.shm_size=256M
apc.shm_segments=1
apc.gc_ttl=7200
apc.ttl=7200
apc.num_files_hint=1024
apc.stat=1
apc.stat_ctime=1

Теперь нарисуем конфиг для nginx, нужно учитывать что для разных CMS можно подбирать разные конфиги учитывающие особенности движка для wordpress или drupal можно сделать например такой конфиг /etc/nginx/conf.d/domain.ru.conf в который написать:

server {
     listen  80;
     server_name  domain.ru;
     rewrite ^ http://www.domain.ru$request_uri? permanent; #301 redirect
}

server {
        server_name www.domain.ru;
        root /var/www/domain.ru;

        access_log /var/log/nginx/domain.ru.access.log;
        error_log  /var/log/nginx/domain.ru.error.log info;

        index index.php;

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        # This matters if you use drush
        location = /backup {
                deny all;
        }

        # Very rarely should these ever be accessed outside of your lan
        location ~* \.(txt|log)$ {
                allow 127.0.0.1;
                deny all;
        }

        location ~ \..*/.*\.php$ {
                return 403;
        }

        location / {
                # This is cool because no php is touched for static content
                try_files $uri $uri/ @rewrite;
                expires max;
        }

        location @rewrite {
                # Some modules enforce no slash (/) at the end of the URL
                # Else this rewrite block wouldn't be needed (GlobalRedirect)
                rewrite ^/(.*)$ /index.php?q=$1;
        }

        location ~ \.php$ {
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_intercept_errors on;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
        }
        location ~* \.(jpg|jpeg|gif|png|swf|tiff|swf|flv)$ {
                expires 4M;
                add_header Cache-Control public;
        }

        location ~* \.(css|js|ico) {
                gzip_static on;
                gzip_disable Firefox/([0-2]\.|3\.0);
                gzip_disable Chrome/2;
                gzip_disable Safari;
                expires 2M;
                add_header Cache-Control private;
        }
}

Здесь например кроме настройки php мы сделаи кеширование картинок и сжатие js, css скриптов. Но вариантов оптимизации и настройки ещё много можно придумать.

Чтобы применить изменения перезапускаем nginx и php процессы

/etc/init.d/nginx restart
/etc/init.d/php5-fpm restart

Теперь можно в браузере зайти в браузере на domain.ru и продолжить установку wordpress с помощью мастера.

Установка phpmyadmin

Можно скачать свежий phpmyadmin но для примера возьмем тот что есть в репозитории:

apt-get install phpmyadmin

Сделаем отдельный конфиг c виртуальным хостом /etc/nginx/conf.d/mysql.domain.ru.conf пишем туда:

#
#       phpMyAdmin
#
server{
	listen 80;
	server_name mysql.domain.ru;
	access_log /var/log/phpmyadmin.access_log;
	error_log /var/log/phpmyadmin.error_log;

	location ^~ /phpmyadmin/ {
		alias /usr/share/phpmyadmin/;
		index index.php;
		location ~ /phpmyadmin(/.*\.php) {
			include fastcgi_params;
			fastcgi_param SERVER_NAME localhost;
			fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin$1;
			fastcgi_pass unix:/var/run/php5-fpm.sock;
			fastcgi_index index.php;
		}
	}
}

Перезапускаем nginx и php

/etc/init.d/nginx restart
/etc/init.d/php5-fpm restart

Открываем в браузере mysql.domain.ru и смотрим что получилось.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *