Nginx, php-fpm, xcache, various php.ini

left Почему то статей про настройку Nginix и php-fpm на Ubuntu 10.10 мало. Все больше предпочитают собирать из исходников да загружать из левых репозиториев. А про настройку php с разными php.ini я вообще не видел. Хотя тема очень интересная. Поэтому я решил написать краткий manual по данной теме. Попутно описав некоторые параметры.

Базовая настройка

Давайте поставим все необходимые пакеты. Их конечно прилично, но они не много места на диске занимаю и не помешают я думаю.

sudo apt-get install nginx
sudo apt-get install php5-fpm php5-mysql php5-curl php5-gd php5-imap php5-mcrypt php5-memcache php5-mhash php5-ps php5-pspell php5-snmp php5-sqlite php5-xmlrpc php5-xsl php5-json php5-xsl

Теперь нам надо сделать начальную настройку Web server и проверить как все работает. Для начала отредактируем конфигурационный файл под что-то похожее. Причем лучше не удалять стандартный, а просто его полностью закомментировать. Там много полезного, кстати как и на этом ресурсе. Открываем конфиг sudo nano /etc/nginx/sites-available/default

server {

    listen   80;

    server_name  localhost nextdomain;

    client_max_body_size 16m;
    keepalive_timeout  120;

    access_log  /var/log/nginx/localhost.access.log;
    error_log /var/log/nginx/localhost.error.log;

    location / {
        root   /var/www;
        index  index.html index.htm;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
    }
}

Теперь что бы посмотреть работу php и его компонент запишем в какой нибудь файлик, допустим sudo nano /var/www/test.php, такой код.

<?php
    phpinfo();
?>

Перезапустим сервер, что бы применить наши изменения

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

Заходим по http://server_ip/test.php и наблюдаем большие таблицы с кучей информации о php. Если все успешно, идем дальше.

Настройка второго сервера php-cgi

Это действие не обязательно и можно перейти к установке xcache. Но если вам интересна, к примеру, идея запуска второго php-cgi сервера для тестовых действий, с включенным выводом ошибок и без кеширующего ускорителя, вам стоит почитать это.

Мы скопируем скрипт запуска и сделаем пару манипуляций над ним. А именно, мы заменим файл настройки php5-fpm.conf и добавим к строке запуска ключ -c что бы указать на другой php.ini.

sudo cp /etc/init.d/php5-fpm /etc/init.d/php5-test
sudo nano /etc/init.d/php5-test

редактируем

php_fpm_BIN=/usr/bin/php5-fpm
php_fpm_CONF=/etc/php5/fpm/php5-fpm-test.conf
php_fpm_PID=/var/run/php5-fpm-test.pid
php_CONF=/etc/php5/fpm/php-test.ini

php_opts="--fpm-config $php_fpm_CONF -c $php_CONF"

Теперь собственно создадим конфигурационные файлы которые мы указали, и от редактируем их.

sudo cp /etc/php5/fpm/php5-fpm.conf /etc/php5/fpm/php5-fpm-test.conf
sudo cp /etc/php5/fpm/php.ini /etc/php5/fpm/php-test.ini

Это минимальный набор который надо заменить. Еще можно настроить количество процессов, но это уже разбирайтесь сами. sudo nano /etc/php5/fpm/php5-fpm-test.conf

pid = /var/run/php5-fpm-test.pid
error_log = /var/log/php5-fpm-test.log
listen = 127.0.0.1:9001

Здесь я привел наиболее распространенные директивы, для общего сведения. sudo nano /etc/php5/fpm/php-test.ini

display_errors = On
post_max_size = 64M
upload_max_filesize = 64M
memory_limit = 32M

Запускаем наш тестовый php.

sudo /etc/init.d/php-test start

Можно создаться еще один блок server в Nginx и указать fastcgi_pass 127.0.0.1:9001;. Вот и все.

Настройка XCache

php сам по себе ни черта не умеет кешировать, поэтому очень тормазнутый. Так что давайте поставим акселератор php кода, для ускорени исполнения скриптов путём кэширования бинарного кода.

sudo apt-get install php5-xcache
sudo nano /etc/php5/conf.d/xcache.ini

Вот небольшой пример настройки

; zend_extension = /usr/lib/php5/20090626/xcache.so
xcache.size = 64M   # хотя бы
xcache.var_size = 32M
xcache.count = 4        # количество ядер, в конфиге написанно как посмотреть
xcache.cacher = On

Если вы заметили, то мы закомментировали строчку zend_extension. Это для того что бы включать ускоритель на отдельных php.ini. Если вы перезапустите php-fpm, то в phpinfo() увидите что раздела xcache, нету. Что бы включить его для отдельного php-cgi сервера надо скопировать zend_extension = /usr/lib/php5/ в конец php.ini, перезапустить php. зайдите на http://server_ip/test.php и убедитесь что xcache включен.

На этом все. Коментарии и замечания по статье приветствуются.

Categories: HowTo, Ubuntu Tags: , ,