На 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, потом найти нужную подпапку, которая появилась в поддиректории этого порта, и скопировать нужное в порт, который не собирается).
