PDA

Просмотр полной версии : [Статья] Установка nginx+fastcgi-php


Gors
23.06.2011, 04:47
В последнее время стал очень сильно популярен вебсервер nginx. Выгода заключается в том, что он более легкий, и позволяет легко выносить различные атаки на нагрузку. nginx установлен на таких проектах как vkontakte.ru и rambler.ru (для второго он собственно и разрабатывался) Минус заключается в том, что он не сильно документирован, а мануалы найденные в интернетах неполные, и приходится некоторые моменты додумывать самому. Существует несколько способов прицепить php к nginx: apache2 в качестве прокси сервера, fastcgi-php. Мы рассмотрим второй способ, т.к. он является более кошерный с моей точки зрения. Установка рассматривается для debian подобных систем (debian, ubuntu).


1. Установка требуемых пакетов.
Для начала поставим из репозитария nginx, php5, php5-cgi, lig[Ссылки могут видеть только зарегистрированные и активированные пользователи]
apt-get install nginx, php5, php5-cgi, lig[Ссылки могут видеть только зарегистрированные и активированные пользователи]

lig[Ссылки могут видеть только зарегистрированные и активированные пользователи] нам понадобится только для того, чтобы запускать fastcgi. Есть отдельные скрипты для его запуска, но ни один у меня не заработал, а запущенный php5-cgi руками постоянно падал
Итак, нужные пакеты поставились, и теперь уберем lig[Ссылки могут видеть только зарегистрированные и активированные пользователи] из автозагрузки и потушим его:
/etc/init.d/lig[Ссылки могут видеть только зарегистрированные и активированные пользователи] stop
update-rc.d -f lig[Ссылки могут видеть только зарегистрированные и активированные пользователи] remove

2. Запуск fastcgi-php
К чему мы собственно и подбирались. spawn-fcgi будет слушать localhost на порту 9000. Для его запуска используем следующее колдунство:
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u [Ссылки могут видеть только зарегистрированные и активированные пользователи] -g [Ссылки могут видеть только зарегистрированные и активированные пользователи] -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid

Это можно запихнуть в файл, или автозагрузку, или вбивать каждый раз в консоль руками после перезагруки машины, это уже додумаете сами на сколько фантазии хватит

3. Настройка php.
Проста до безобразия. Ищем файл /etc/php5/cgi/php.ini, открываем его через любой доступный текстовый редактор, находим в нем подобие строки
; cgi.fix_pathinfo = 0

и превращаем её в
cgi.fix_pathinfo = 1

4. Настройка nginx
Если у вас доступ к серверу идет по ип адресу, или всего 1 домен, то для прицепки php достаточно отредактировать файл /etc/nginx/sites-available/default
Открываем его через текстовый редактор, и ищем закоментированную секцию location ~ \.php$ { и разкоментируем её.

Выглядит она примерно так:

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/[Ссылки могут видеть только зарегистрированные и активированные пользователи]$fastcgi_script_name;
include fastcgi_params;
}

Если у вас файлы сайта лежат в дирректории /var/[Ссылки могут видеть только зарегистрированные и активированные пользователи] то тут можно ничего не менять, и оставить все как есть.

Создаем через любой текстовый редактор файл /etc/nginx/fastcgi_params и вставляем в него следующий текст:

fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;

Делаем /etc/init.d/nginx restart, создаем в папке с файлами сайта файл index.php, в него помещаем следующий текст:

<?php phpinfo(); ?>

Открываем [Ссылки могут видеть только зарегистрированные и активированные пользователи]адрес_сайта/index.php. Если вы увидели информацию о системе php, то значит все зергуд, и можно смело лить сайт/радостно прыгать по комнате/пить пиво/etc. Если увидели что-то духе ошибки 502, значит fastcgi-php не запустился, и ещё раз перечитываем мануал, и смотрим что забыли.