nginx, php-cgi или избавляемся от apache
Теста ради решил несколько доменов поднять только на nginx и посмотреть как поменяется картинка на графиках загрузки сервера.
Как запустить nginx поверх apache было описано тут
Теперь начинаем прикручивать php к nginx через fastcgi.
для этого нам понадобится пакет spawn-fcgi
Итак, по порядку, сначала добавляем поддержку fastcgi в nginx:
echo "www-servers/nginx fastcgi ssl" >> /etc/portage/package.use/nginx |
и пересобираем его
emerge -av nginx |
теперь ставим spawn-cgi и php с поддержкой fastcgi:
echo www-servers/spawn-fcgi ~amd64 >> /etc/portage/package.keywords echo dev-lang/php cgi force-cgi-redirect >> /etc/portage/package.use/php emerge -av spawn-fcgi emerge -av php |
теперь расказываем spawn-cgi, что мы его пудем юзать совместно с php, для это создаем оттельный скрипт загрузки
ln -sf /etc/init.d/spawn-fcgi /etc/init.d/spawn-fcgi.php |
ну и готовим для него конфиг на базе уже имеющегося:
cp /etc/conf.d/spawn-fcgi /etc/conf.d/spawn-fcgi.php |
Внутри вносим небольшие изменения, чтоб враг не догадался:
ENABLE_SPAWNFCGI="yes" ## ABSOLUTE path to the spawn-fcgi binary SPAWNFCGI="/usr/bin/spawn-fcgi" ## ABSOLUTE path to the PHP binary FCGI_PROGRAM="/usr/bin/php-cgi" ## bind to tcp-port on localhost FCGI_PORT="65532" ## number of PHP childs to spawn PHP_FCGI_CHILDREN=5 ## number of request server by a single php-process until is will be restarted PHP_FCGI_MAX_REQUESTS=1000 ## IP adresses where PHP should access server connections from FCGI_WEB_SERVER_ADDRS="127.0.0.1" # allowed environment variables sperated by spaces ALLOWED_ENV="PATH USER" # do NOT change line below ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS" ## if this script is run as root switch to the following user USERID=nginx GROUPID=nginx |
Запускаем spawn-cgi
/etc/init.d/spawn-fcgi.php start |
Если все прошло гладко, добавляем его в автозагрузку
rc-update add spawn-fcgi default |
Теперь беремся за nginx. По сравнению с родным файлом там нужно добавить все несколько строк:
include /etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1:65532; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/путь/к/дому$fastcgi_script_name; location / { if (-f $request_filename) { expires 30d; break; } # this sends all non-existing file or directory requests to index.php if (!-e $request_filename) { rewrite ^(.+)$ /index.php?q=$1 last; } } |
и пробуем поднятся
/etc/init.d/nginx restart |
В файле fastcgi.conf можно прописать, что-то для себя, но и с дефолтными параметрами все работает.
Вродь ничего не пропустил 🙂