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

Как оптимизировать время загрузки сайта

Проверка скорости загрузки

Есть превосходный ресурс webo.in на тему оптимизации с кучей полезной информации. К тому же содержит множество полезных ссылок на нужные сервисы.

Кстати, говорят, что Гугл собирается учитывать скорость загрузки сайта при индексации.