PHP-FPM + Nginx
В один прекрасный день было решено отказаться от бекенда в роли которого выступал Apache2 с mod_php. Проблемы с зависанием скриптов, отсутствие возможности нормального дебага, плюс ко всему какой-то скрипт начал валить весь apache. Решено было опробовать php5-fpm, единственное что теряем, это .htaccess
Пакет ставится из репозитория:
После чего необходимо настроить пулы, которые позволяют задать настройки пхп, логи, порты, сокеты, пользователя и много другое.
Пулы лежат в /etc/php5/fpm/pool.d, сразу после установки там есть
/etc/php5/fpm/pool.d/example.com
Смотрим сокеты:
где:
l — listening
x — unix
Должен появиться наш
Далее следует установка и настройка nginx Я nginx беру с официальной репы
Загрузка и добавление ключа
Далее приведу минимальный конфиг
/etc/nginx/conf.d/example.com.conf
Пакет ставится из репозитория:
apt-get install php5-fpm
После чего необходимо настроить пулы, которые позволяют задать настройки пхп, логи, порты, сокеты, пользователя и много другое.
Пулы лежат в /etc/php5/fpm/pool.d, сразу после установки там есть
www.conf
. На основе его можно составить свой, конфиг хорошо документирован./etc/php5/fpm/pool.d/example.com
; Название пула [example.com] ; Пользователь и группа для процесса user = www-data group = www-data ; Сокет, для каждого пула свой listen = /var/run/php5-fpm-example.com.sock ; Пользователь и группа для сокета listen.owner = www-data listen.group = www-data ; Режим создания дочерних процессов: ; static - фиксированное число процессов (pm.max_children) ; dynamic - процессы будут создаваться динамически в зависимости от нагрузки. ; всегда будет существовать хоть один процесс. ; pm.max_children - максимальное число процессов; ; pm.start_servers - количество процессов создаваемых при старте; ; pm.min_spare_servers - минимальное число простаивающих процессов; ; pm.max_spare_servers - максимальное число простаивающих процессов. ; ondemand - дочерние процессы не создаются при запуске, а только при обработке ; входящих соединений: ; pm.max_children - максимальное число процессов; ; pm.process_idle_timeout - время в секундах после чего простаивающий процесс будет удалён. ; pm.max_requests - количество обработаных запросов, после которых процессы php-fpm будут перезагружены pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 pm.process_idle_timeout = 10s pm.max_requests = 500 ; Перенаправлять вывод процесса в лог catch_workers_output = yes ; Если скрипт выполняется больше указанного времени, писать отладочную инфу в slowlog request_slowlog_timeout = 3 ; Убивать все что выполняется больше указанного времени request_terminate_timeout = 15 ; Логи access.log = /var/log/fpm-php/$pool.access.log ; Лог-файл для медленных запросов slowlog = /var/log/fpm-php/$pool.log.slow ; С помощью директивы php_admin_value можно изменять глобальные настройки php php_admin_value[memory_limit] = 100MПосле надо создать каталог для логов и запустить php5-fpm
mkdir /var/log/fpm-php && /etc/init.d/php5-fpm start
Смотрим сокеты:
netstat -lx
где:
l — listening
x — unix
Должен появиться наш
php5-fpm-example.com.sock
Далее следует установка и настройка nginx Я nginx беру с официальной репы
Загрузка и добавление ключа
wget -O - http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
Добавить в /etc/apt/sources.list
deb http://nginx.org/packages/debian/ wheezy nginx
deb-src http://nginx.org/packages/debian/ wheezy nginx
И установить apt-get update
apt-get install nginx
Далее приведу минимальный конфиг
/etc/nginx/conf.d/example.com.conf
server { listen 80; server_name example.com; root /var/www/example.com; location / { index index.php; } location ~ \.php$ { fastcgi_pass unix:/var/run/php5-fpm-example.com.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }