у Ника

имеется кое-что: лог, код, муз

 

15 июля 2010, 01:12

nginx + FastCGI

На firstvds.ru среди готовых пакетов для выделенных серверов теперь есть FreeBSD 8. А поскольку несколько раз видел упоминание о лучшей производительности от версии к версии и к тому же начитался о связке nginx + php через fastcgi (+ опционально-желательно кеширующий в памяти инструмент типа eAccelerator), то понял, что пора это все попробовать настроить, благо инструкций в интернете валом.

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

1) PHP через FastCGI.

На виду/слуху два способа: специальный патч для php php-fpm и утилита spawn-fcgi из дистрибутива lighttpd.

Оказалось, для spawn-fcgi есть свой порт на фрибсд, откуда оно легко устанавливается:

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

При этом надо обеспечить себе сборку php с cgi (собирается тоже из своего порта /usr/ports/lang/php5, и при сборке указать все опции CGI). Лучше сразу переустановить, а то я много времени потратил, гадая, почему php-cgi выдавал внутреннюю ошибку 500 при обработке index.php.

Итак , после установки spawn-fcgi, надо указать в системном конфиг-файле rc.conf, что программу надо запускать автоматом:

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

Примечание: если печатать spawn-fcgi start, находясь при этом в директории /usr/local/etc/rc.d/, ничего не выйдет.

Заключительный штрих: знающие люди говорят (и приводят доки при этом), что через сокет это все работает быстрее, чем через TCP (даже на одной машине), поэтому в spawn-fcgi комментируем строки про адрес и порт и добавляем путь к сокету:

#: ${spawn_fcgi_bindaddr="127.0.0.1"}
#: ${spawn_fcgi_bindport="9000"}
: ${spawn_fcgi_bindsocket="/tmp/fastcgi_sock"}

(С помощью команды netstat -Lan можно посмотреть, какие порты слушаются, и появился ли наш сокет.)

2) nginx

Nginx уже установлен и запущен, и даже настроен, но для ипользования с Апачем. Поэтому будем править имеющйся конфиг.

Если надо переустановить:

cd /usr/ports/www/nginx
make deinstall
make install clean

Конфиг написал на примерах следующих статей: раз - содержит готовые решения для известных CMS, а в моей правила rewrite как у вордпресса, два, три.

3) APC

Ну и напоследок - кеширующий механизм APC. Выбрал его, потому как где-то написали, что его на Facebook'е используют, причем не только как кешер исполняемого кода, но и хранилище произвольных пользовательских данных в памяти (типа memcached).

cd /usr/ports/www/pecl-APC
make install clean

Примечание: при сборке всяких расширений постоянно ругался компилятор на отсутствие php_pcre.h. Оказалось, можно его подложить из другого места. Для этого надо пойти в другой порт (напр, /usr/ports/devel/php52-spl/ или /usr/ports/lang/php5-что-то-еще (толком и не помню), собрать программу без установки и очистки промежуточных файлов, скомандовав просто make, потом найти нужную подпапку, которая появилась в поддиректории этого порта, и скопировать нужное в порт, который не собирается).

Сохранил решение проблемы отсутствия окна настройки установки из порта (make config, freebsd 8).

копипаст из форума

Это coloreminder. Удобный весьма инструмент.