PHP-FPM на примере Gentoo
На моей домашней машине уже давно отказался от apache, в довесок ко всему на сервисе Flazer тоже изначально используется связка Nginx+PHP+Postgresql. В обоих случаях php запускается как FastCGI-сервер, через spawn-fcgi от проекта Lighttpd.
Совсем недавно был анонсирован PHP 5.3.3 с включенными патчами fpm, обеспечивающий нормальную поддержку CGI интерфейса и тем самым позволяющий избавиться от ненужных сущностей, таких как spawn-fcgi.
И вот сегодня эта версия PHP была добавлена в дерево Gentoo, конечно пока hardmask. Давайте попробуем её собрать и даже запустить.
Размаскируем.
echo «dev-lang/php ~amd64» >> /etc/package.keywords
echo «dev-lang/php» >> /etc/package.unmask
Отключим spawn-fcgi для чистоты эксперимента.
/etc/init.d/spawn-fcgi.www stop
Пересоберем php с нужными флагами, включим fpm и избавимся от уже не нужного нам cgi. (Лучше указать в /etc/package.use, а не как в примере ниже)
USE=»fpm -cgi» emerge -av php
Отредактируем конфигурационный файл «/etc/php/fpm-php5/php-fpm.conf».
Во первых будем использовать сокеты, это чуть быстрей чем гонять данные через порт, во-вторых укажем пользователя и группу. Лично у меня в группу www включен nginx, но вы могли бы создать нового пользователя и группу для вашего веб-приложения.
…
listen = /var/run/php-fpm/default.socket
…
user = www
group = www
…
Создадим папку сокета.
mkdir /var/run/php-fpm/
Теперь перенатроим Nginx, отредактировав конфиг «/etc/nginx/nginx.conf» или свой «vhost».
…
location ~ .php$ {
fastcgi_pass unix:/var/run/php-fpm/default.socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
…
Сам Nginx собран с модулем fastcgi (NGINX_MODULES_HTTP=»fastcgi» в make.conf).
Перезапустим веб-сервер.
/etc/init.d/php-fpm start
/etc/init.d/nginx start
В результате имеем рабочую связку Nginx+PHP без посредников.