Настройка связки Nginx, PHP и Spawn-fcgi (nginx cgi fastcgi php freebsd)
Published on Январь 24, 2009 by admin · 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
либо воспользуемся портами:
в конфигурации выбираем нужные вам опции и обязательно:
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
/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: cgi, fastcgi, freebsd, nginx
Exchange 2007
Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам:
Проведение мониторинга Exchange 2007 с помощью диспетчера System ...
[+]
Введение
В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ...
[+]
Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ...
[+]
Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ...
[+]
Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам:
Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1)
...
[+]
If you missed the previous parts in this article series please read:
Exchange 2007 Install and Configuration from the command line (Part ...
[+]
Инструмент ExRCA
Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями:
Тест подключения Outlook 2007 Autodiscover
Тест подключения Outlook 2003 RPC ...
[+]
Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам:
Развертывание сервера Exchange 2007 Edge Transport (часть 1)
Развертывание ...
[+]
Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ...
[+]
Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ...
[+]
Отличная статья.
От себя добавлю. Ставил все вышеперечисленнок на неком image centos52-bare.
1) lighttpd запустил как ./configure —without-bzip2
2) пришлось создать отсутствуюший каталог /usr/local/etc/rc.d/
3) не знаю насколько правильно, но создал отсутствующий /etc/rc.conf
С Уважением,
Olex Рощин
А разве использование сокетов не лучшее решение?..
затем.. явно скопировали из сети конфиг nginx :) location / {..} должен идти после блока location ~ \.php {..}
CentOS это линукс, там нет rc.conf, запуск сервисов там через chkconfig