MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Настройка Nginx для поддержки PHP при помощи FastCGI
02.12.2009
13:06
Текстовые метки: nginx, php, php5
Раздел: Компьютер - Linux - Сеть в Linux - nginx

После моего первого рассказа (http://blog.kovyrin.net/2006/04/04/nginx-small-powerful-web-server/) о веб- и reverse-proxy сервере nginx, я получил много писем с коментариями и вопросами насчет него. Одним из самых распространенных вопросом был “Как использовать PHP вместе с nginx?”. А этой маленькой пошаговой инструкции я постараюсь описать, как это можно сделать.

Nginx включает в себя поддержку технологии FastCGI для работы с внешними серверами и утилитами. PHP тоже поддерживает FastCGI и может быть использован для обработки FastCGI-запросов от nginx.

Итак, для начала нам необходимо установить PHP с поддержкой технологии fastcgi и запустить его на каком-либо tcp-порту, на который потом будут переправляться запросы из nginx. Процесс инсталляции может отличаться на разных системах, потому я опишу процесс сборки PHP из исходного кода как один из самых распространенных методов. Для того, чтобы получить версию интерпретатора PHP с поддержкой FastCGI, Вы можете использовать следующий набор команд:

# ./configure --prefix=/opt/php --enable-fastcgi

...

# make

...

# make install

...

#

Когда эта последовательность команд будет успешно завершена, Вы сможете запустить свой fastcgi-сервер. Но существует два возможных варианта, как это сделать:

  • Запуск встроенного в PHP сервера FastCGI – метод, не требующий никаких дополнительных утилит.
  • Запуск PHP внутри какого-либо стороннего обработчика запросов – этот вариант может быть более удобным из-за большей гибкости в настройке.

Если Вы решили не использовать никакого стороннего ПО, то можете запустить PHP с использованием его встроенного менеджера FastCGI-запросов при помощи следующего скрипта:

#!/bin/bash

## ABSOLUTE path to the PHP binary

PHPFCGI="/opt/php/bin/php"

## tcp-port to bind on

FCGIPORT="8888"

## IP to bind on

FCGIADDR="127.0.0.1"

## number of PHP children to spawn

PHP_FCGI_CHILDREN=5

## number of request before php-process will be restarted

PHP_FCGI_MAX_REQUESTS=1000

# allowed environment variables sperated by spaces

ALLOWED_ENV="ORACLE_HOME PATH USER"

## if this script is run as root switch to the following user

USERID=www-data

################## no config below this line

if test x$PHP_FCGI_CHILDREN = x; then

PHP_FCGI_CHILDREN=5

fi

ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_CHILDREN"

ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS"

ALLOWED_ENV="$ALLOWED_ENV FCGI_WEB_SERVER_ADDRS"

if test x$UID = x0; then

EX="/bin/su -m -c \"$PHPFCGI -q -b $FCGIADDR:$FCGIPORT\" $USERID"

else

EX="$PHPFCGI -b $FCGIADDR:$FCGIPORT"

fi

echo $EX

# copy the allowed environment variables

E=

for i in $ALLOWED_ENV; do

E="$E $i=${!i}"

done

# clean environment and set up a new one

nohup env - $E sh -c "$EX" &> /dev/null &

Если же Вы решили попробовать использовать какое-либо стороннее программное обеспечение для запуска PHP как FastCGI-серера, могу посоветовать Вам взглянуть на утилиту spawn-fcgi из пакета lighttpd.

Итак, Ваше сервер PHP запущен в режиме FastCGI и последнее, что Вам осталось сделать, это изменить конфигурацию Вашего сервера nginx таким образом, чтобы он переправлял все запросы к файлам php на определенный tcp-порт, на котором слушает PHP. Для этого может быть использован следующий пример секции location из конфигурационного файла nginx (полная версия примера нвходится здесь):

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:8888

#

location ~ .php$ {

fastcgi_pass 127.0.0.1:8888;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;

fastcgi_param QUERY_STRING $query_string;

fastcgi_param REQUEST_METHOD $request_method;

fastcgi_param CONTENT_TYPE $content_type;

fastcgi_param CONTENT_LENGTH $content_length;

}

Вот и все! Теперь Вы можете использовать Ваш сервер nginx для обслуживания любых сайтов, написанных на PHP с производительностью, близкой к той, с которой работает модель mod_php в Apache, но при этом у вас будет больше свободной памяти, что позволит Вам обрабатывать больше запросов от посетитесей Ваших сайтов.

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

Примечание: Скрипт запуска Fast CGI (который представлен в этой статье) – не полный, у него отсутствует нижняя часть! Хотя нет, вроде работает.

← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования