The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Настройка Nginx для поддержки PHP при помощи FastCGI (php http nginx web fastcgi)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: 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, но при этом у вас будет больше свободной памяти, что позволит Вам обрабатывать больше запросов от посетитесей Ваших сайтов.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, CTAPYLLIKA (?), 14:44, 10/07/2008 [ответить]  
  • +/
    #!/bin/bash

    # source function library
    . /etc/init.d/functions

    ## bring up local interface ########################
    ifconfig lo 127.0.0.1 up

    ## php options #####################################

    PHPFCGI="/usr/bin/php"
    PHP_OPTIONS="-b 127.0.0.1:9000"

    ## number of PHP children to spawn
    PHP_FCGI_CHILDREN=1

    ## number of request before php-process will be restarted
    PHP_FCGI_MAX_REQUESTS=1000

    FCGI_WEB_SERVER_ADDRS="127.0.0.1"

    EA="PATH USER PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"

    ## copy the allowed environment variables
    E=
    for i in $EA; do
      E="$E $i=${!i}"
    done

    EX="$PHPFCGI $PHP_OPTIONS"

    ## php options stop ################################

    NGINX_OPTIONS=""

    RETVAL=0
    prog="webif"

    start() {
            echo -n $"Starting $prog: "
            if [ $UID -ne 0 ]; then
                    RETVAL=1
                    failure
            else
    nohup env - $E sh -c "$EX" &> /dev/null &

                    daemon /usr/sbin/nginx $NGINX_OPTIONS
                    RETVAL=$?
                    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/webif
            fi;
            echo
            return $RETVAL
    }

    stop() {
            echo -n $"Stopping $prog: "
            if [ $UID -ne 0 ]; then
                    RETVAL=1
                    failure
            else
                    killproc /usr/sbin/nginx
                    RETVAL=$?
                    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/webif

                    killall -9 php
            fi;
            echo
            return $RETVAL
    }

    reload(){
            echo -n $"Reloading $prog: "
            killproc /usr/sbin/nginx -HUP
            RETVAL=$?
            echo
            return $RETVAL
    }

    restart(){
    stop
    start
    }

    case "$1" in
      start)
    start
    ;;
      stop)
    stop
    ;;
      restart)
    restart
            ;;
      reload)
    reload
            ;;
      *)
    echo $"Usage: $0 {start|stop|restart|reload}"
    RETVAL=1
    esac

    exit $RETVAL

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру