Дек 12 2009

spawn-fcgi. Делаем php Fast-CGI сервер.

spawn-fcgi — одна из составных частей проекта Lighttpd. Предназначен он для того, что бы запустить php, как FastCGI сервер, ну а с этим сервером может работать потом практически любой http сервер. Изначально конечно планировалось, что будет Lighttpd работать, но вот относительно недавно в портах FreeBSD он появился как независимый порт.
Поставим его:

cd /usr/ports/www/spawn-fcgi/
make install clean

Порт ставится быстро и без лишних вопросов.

Если мы собираемся использовать php, то в настройках сборки порта php5(/usr/ports/lang/php5) должна быть обязательно указана опция:

[X] CGI        Build CGI version

После установки spawn-fcgi, если у нас php собран с cgi версией, разрешим запуск spawn-fcgi:

echo 'spawn_fcgi_enable="YES"'>> /etc/rc.conf

и запустим:

/usr/local/etc/rc.d/spawn-fcgi start

в ответ увидим что то наподобие:

Starting spawn_fcgi.
spawn-fcgi: child spawned successfully: PID: 81722

Все, значит FastCGI php у нас работает.
Если php собран без опции CGI, нужно его пересобрать и вернуться к настройкам.
Так легко запустить FastCGI php у нас удалось потому, что spawn-cgi заранее настроен на использование с php-cgi.
Все настройки spawn-cgi находятся в его стартовом скрипте(/usr/local/etc/rc.d/spawn-fcgi):

: ${spawn_fcgi_app="/usr/local/bin/php-cgi"}
: ${spawn_fcgi_app_args=""}
: ${spawn_fcgi_pidfile="/var/run/spawn-fcgi.pid"}
: ${spawn_fcgi_username="www"}
: ${spawn_fcgi_groupname="www"}
: ${spawn_fcgi_chroot_dir=""}
: ${spawn_fcgi_bindaddr="127.0.0.1"}
: ${spawn_fcgi_bindport="9000"}
: ${spawn_fcgi_bindsocket=""}
: ${spawn_fcgi_bindsocket_mode="0777"}
: ${spawn_fcgi_children="5"}
: ${spawn_fcgi_max_requests="1000"}
: ${spawn_fcgi_web_server_addrs=""}
: ${spawn_fcgi_allowed_env=""}

Важные параметры тут это spawn_fcgi_bindaddr — адрес на котором FastCGI сервер будет прини мать соединения, spawn_fcgi_bindport — порт на котором FastCGI принимает соединения. spawn_fcgi_children — количество процессов сервера, на практике я выяснил, что 5 действительно оптимальная цифра, больше 10 вызывают замедление работы, до 10-ти никакой заметной реакции. Поэтому рекомендую оставлять 5. spawn_fcgi_max_requests — число обработанных запросов, после которых процесс будет перезапущен. Перезапуск процессов нужен для препятствия утечек памяти.
По умолчанию получается, что FastCGI php сервер будет принимать запросы на 127.0.0.1:9000
На этом настройка FastCGI php закончена. В принципе за нас ее сделал мантейнер порта. За что ему большое спасибо.

  • By ufabiz, 14.04.2010 @ 11:41

    Я бы еще отметил возможность доступа nginx’a к fcgi не по tcp, а через unix socket.
    Сокет немного быстрее tcp

    Непонятно чем оправдано количество дочерних php процессов.
    Почему 5 а не 2 или 20 или 500?

Other Links to this Post


Украинская Баннерная Сеть