Ключевые слова:php, http, nginx, web, fastcgi, (найти похожие документы)
From: Alexey Kovyrin <alexey@kovyrin.net.>
Date: Sun, 22 Dec 2006 17:02:14 +0000 (UTC)
Subject: Настройка Nginx для поддержки PHP при помощи FastCGI
Оригинал: http://blog.kovyrin.net/2006/05/30/nginx-php-fastcgi-howto/lang/ru
После поего порвого рассказа о веб- и 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, но при этом
у вас будет больше свободной памяти, что позволит Вам обрабатывать
больше запросов от посетитесей Ваших сайтов.
Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке,
посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных
администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости
индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.
Каждый, кто оформит подписку, получает бонус- объёмные наклейки на системный блок и подарки: с одним из
первых выпусков журнала в 2012 году- диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную
версию журнала в pdf-формате.
Подробнее о проведении акции вы можете прочитать на
странице сайта.