nginx, php-cgi или избавляемся от apache

Автор | 11.07.2010

Теста ради решил несколько доменов поднять только на 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 можно прописать, что-то для себя, но и с дефолтными параметрами все работает.
Вродь ничего не пропустил 🙂

Залишити відповідь