Настройка связки Nginx, PHP и Spawn-fcgi (nginx cgi fastcgi php freebsd)

Published on Январь 24, 2009 by   ·   3 комментария

Сейчас  многие  отказываются от apache в пользу nginx. Который, на мой
взгляд,   подкупает   своей   в  первую  очередь  производительностью,
возможностью  быстрого  и  легкого  масштабированию  бекэндов,  так же
расширенными   возможностями   конфигурации   сервиса.   Каждый  может
максимально точно подогнать его под себя.

И так, давайте приступим. (FreeBSD 6.2-RELEASE)
Скачиваем и разжимаем nginx (0.6.14)

wget http://www.sysoev.ru/nginx/nginx-LAST.tar.gz
tar -zxf nginx-LAST.tar.gz
ln -s nginx-LAST nginx

либо воспользуемся портами:

cd /usr/ports/www/nginx-devel

в конфигурации выбираем следующие пункты:

make config

[X] HTTP_MODULE
[X] HTTP_PERL_MODULE
[X] HTTP_REWRITE_MODULE
[X] HTTP_STATUS_MODULE
make install clean

Если  nginx  устанавливался  из  портов, установку PCRE и конфигурацию
nginx пропускаем и переходим к php

Устанавливаем  Perl  Compatible  Regular Expressions (на данный момент
доступна версия 7.4)

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-LAST.tar.gz
tar -zxf pcre-LAST.tar.gz
ln -s pcre-LAST pcre

Если nginx не из портов, то проделываем следующие.

Удалим  не  нужные  нам  модули  для реализации простого веб-сервера с
поддержкой php.

cd nginx

./configure  --prefix=/usr/local/nginx \
--with-http_stub_status_module \
--without-http_empty_gif_module \
--without-select_module \
--without-poll_module \
--without-http_userid_module \
--without-http_auth_basic_module \
--without-http_autoindex_module \
--without-http_map_module \
--without-http_referer_module \
--without-http_proxy_module \
--with-pcre=../pcre

make && make install

Далее очередь PHP (5.2.4)

wget http://www.php.net/get/php-LAST.tar.gz/from/uk.php.net/mirror
tar -zxf php-LAST.tar.gz
ln -s php-LAST php

сd php

./configure \
--enable-fastcgi \
--enable-force-cgi-redirect \
--enable-discard-path

make && make intsall

либо воспользуемся портами:

cd /usr/ports/lang/php5

в конфигурации выбираем нужные вам опции и обязательно:

make config

[X] CGI
[X] REDIRECT
[X] FASTCGI
make install clean

Для  запуска  php я использую spawn-fcgi от lighttpd, на данный момент
доступна 1.4.18. Так что пройдём к следующему шагу.

cd ..
wget http://www.lighttpd.net/download/lighttpd-LAST.tar.gz
tar -zxf lighttpd-LAST.tar.gz
cd lighttpd-LAST
./configure

make

make  install  нам  не  требуется,  так как нам потребуются только два
файла из данного проекта.

cp src/spawn-fcgi /usr/local/bin/spawn-fcgi
cp doc/spawn-php.sh /usr/local/etc/rc.d/

либо воспользуемся портами:

cd /usr/ports/www/lighttpd

Выполняем только
[cc lang="bash" tab_size="2" lines="-1"]
make

В конфигурационном меню убираем все опции. Далее делаем следующие

cp src/spawn-fcgi /usr/local/bin/spawn-fcgi
cp doc/spawn-php.sh /usr/local/etc/rc.d/

cd /usr/ports/www/lighttpd

слегка подправим /usr/local/etc/rc.d/spawn-php.sh

#!/usr/local/bin/bash
## ABSOLUTE path to the spawn-fcgi binary
SPAWNFCGI="/usr/local/bin/spawn-fcgi"
## ABSOLUTE path to the PHP binary
FCGIPROGRAM="/usr/local/bin/php-cgi"

Если  nginx  инсталлировали  не  из портов, создаём запускной файл для
nginx

touch /usr/local/etc/rc.d/nginx.sh

следующего содержания:

#!/bin/sh
nginx_enable=${nginx_enable-"NO"}
nginx_flags=${nginx_flags-""}
nginx_pidfile=${nginx_pidfile-"/usr/local/nginx/logs/nginx.pid"}

. /etc/rc.subr

name="nginx"
rcvar=`set_rcvar`
command="/usr/local/nginx/sbin/nginx"
load_rc_config $name
pidfile="${nginx_pidfile}"
extra_commands="configtest reload"
configtest_cmd="configtest_cmd"
configtest_cmd()  {
echo "Configuration syntax test for ${name}."
if ${command} ${nginx_flags} -t; then
:
else
err 8 "FATAL: bad config for ${name}"
fi
}
start_cmd="echo \"Starting ${name}.\";
/usr/bin/limits -U www ${command} ${nginx_flags}"

run_rc_command "$1"

не забываем прописать в /etc/rc.conf

nginx_enable="YES"

Конфигурационный файл для nginx

/usr/local/nginx/conf/nginx.conf

user  nobody;
worker_processes  1;
pid        logs/nginx.pid;
events {
worker_connections  1024;
}
http {
include       mime.types;
default_type  application/octet-stream;
sendfile       on;
tcp_nopush     on;
tcp_nodelay    on;
keepalive_timeout  65;
server_names_hash_max_size 2048;
server_names_hash_bucket_size 128;
server {
listen       80;
server_name  yoursite.com;
charset utf8;
location / {
root   /path/yoursite.com;
index  index.html index.php;
}
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   html;
}
location ~ \.php$ {
fastcgi_pass   127.0.0.1:1026;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /path/yoursite.com$fastcgi_script_name;
include        fastcgi_params;
}
}
}

Вот собственно и всё. Пробуем стартануть.

/usr/local/etc/rc.d/spawn-php.sh
/usr/local/etc/rc.d/nginx.sh

П.С.  В  этой  статье  описывается конфигурация с учётом того, что все
приложения будут установлены на одном сервере. Если кому-то интересно,
то  могу написать продолжение в котором разберём конфигурацию с учетом
того,  что php будет стоять на других серверах как backend, а мы будем
балансировать нагрузку на них с помощью nginx.

















Смотрите также:

Tags: , , ,

Readers Comments (3 комментария)

  1. Olex:

    Отличная статья.
    От себя добавлю. Ставил все вышеперечисленнок на неком image centos52-bare.

    1) lighttpd запустил как ./configure —without-bzip2
    2) пришлось создать отсутствуюший каталог /usr/local/etc/rc.d/
    3) не знаю насколько правильно, но создал отсутствующий /etc/rc.conf

    С Уважением,
    Olex Рощин

  2. Александр:

    А разве использование сокетов не лучшее решение?..

    затем.. явно скопировали из сети конфиг nginx :) location / {..} должен идти после блока location ~ \.php {..}

  3. Андрей:

    CentOS это линукс, там нет rc.conf, запуск сервисов там через chkconfig




Да человек я, человек! =)




Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]