Установка и настройка связки nginx + spawn-fcgi (PHP)

Материал из 1GbWiki.

(Различия между версиями)
Перейти к: навигация, поиск
Версия 09:56, 31 января 2011 (править)
Александр Пристенский (Обсуждение | вклад)

← К предыдущему изменению
Текущая версия (10:56, 31 января 2011) (править) (отменить)
Александр Пристенский (Обсуждение | вклад)

 
(7 промежуточных версий не показаны.)
Строка 5: Строка 5:
http://redmine.lighttpd.net/projects/spawn-fcgi http://redmine.lighttpd.net/projects/spawn-fcgi
-=== Скачиваем ===+=== Скачиваем spawn-fcgi ===
-<code>wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz</code>+ wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz
-=== Распаковываем ===+=== Распаковываем spawn-fcgi ===
-<code>tar xvfz spawn-fcgi-1.6.3.tar.gz</code>+ tar xvfz spawn-fcgi-1.6.3.tar.gz
-=== Устанавливаем ===+=== Устанавливаем spawn-fcgi ===
-<code>./configure --prefix=/usr<br/>+Заходим в каталог с распакованым spawn-fcgi и выполняем команды:<br/>
-make<br/>+ ./configure --prefix=/usr
-su make install</code>+ make
 + su make install
== Установка nginx == == Установка nginx ==
 +nginx можно взять с официального сайта: http://sysoev.ru/nginx/
-== Настройка nginx ==+=== Скачиваем nginx ===
 + wget http://sysoev.ru/nginx/nginx-0.8.54.tar.gz
 + 
 +=== Распаковываем nginx ===
 + tar xvfz nginx-0.8.54.tar.gz
 + 
 +=== Устанавливаем nginx ===
 +Заходим в каталог с распакованым nginx и выполняем команды:<br/>
 + ./configure
 + make
 + su make install
 + 
 +После инсталляции каталоги nginx будут находиться по пути: <code>/usr/local/nginx</code><br/>
 + 
 +Подробнее про инсталляцию nginx написано здесь: http://sysoev.ru/nginx/docs/install.html
 + 
 +== Настройка nginx + spawn-fcgi ==
 + 
 +=== Скрипт запуска/останова nginx и spawn-fcgi в Gentoo Linux ===
 +Скрипт следует разместить по следующему пути: <code>/etc/init.d/nginx</code><br/>
 +и обязательно дать ему права на выполнение:
 + chmod +x /etc/init.d/nginx
 + 
 +Содержимое скрипта следующее:
 + #!/sbin/runscript
 + start(){
 + # run fastcgi server
 + exec 2>&1
 + PHP_FCGI_CHILDREN=5 \
 + PHP_FCGI_MAX_REQUESTS=1000 \
 + exec /usr/bin/spawn-fcgi -n -s /var/run/php-fcgi.sock -n -u nobody -U nobody -- /usr/bin/php-cgi &
 +
 + # run nginx
 + cd /usr/local/nginx/sbin
 + ./nginx &
 + }
 +
 + stop(){
 + kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`
 + killall -9 php-cgi
 + }
 + 
 +Запуск/останов делается командой:
 + /etc/init.d/nginx start # запуск
 + /etc/init.d/nginx stop # останов
 + 
 +Для автоматического запуска/останова при перезапуске VDS необходимо создать ссылку:
 + ln -s /etc/init.d/nginx /etc/runlevels/default/nginx
=== Настройка виртуальных хостов в nginx === === Настройка виртуальных хостов в nginx ===
-== Примеры файлов конфигурации и скриптов запуска/останова ==+Допустим у нас будет два домена:
 +* по умолчанию (default, когда к VDS обращаются по IP адресу без указания хоста)
 +* mysite.ru
 + 
 +Для этого создадим следующие файлы и каталоги:
 + mkdir /usr/local/nginx/www
 + mkdir /usr/local/nginx/www/default
 + mkdir /usr/local/nginx/www/mysite.ru
 + chown -R nobody:nogroup /usr/local/nginx/www/*
 + mkdir /usr/local/nginx/conf/vhosts
 + touch /usr/local/nginx/conf/vhosts/default
 + touch /usr/local/nginx/conf/vhosts/mysite.ru
 + 
 +Основной файл конфигурации nginx <code>/usr/local/nginx/conf/nginx.conf</code> в минимальном виде выглядит так:
 + worker_processes 1;
 +
 + events {
 + worker_connections 1024;
 + }
 +
 + http {
 + include mime.types;
 + default_type application/octet-stream;
 + sendfile on;
 + keepalive_timeout 65;
 +
 + include vhosts/*;
 + }
 + 
 +Для хоста по умолчанию файл конфигурации <code>/usr/local/nginx/conf/vhosts/default</code> имеет следующее содержимое:
 + server {
 + listen 80;
 + server_name _;
 +
 + root /usr/local/nginx/www/default;
 + index index.html; # если сайт на PHP - заменить на index.php
 +
 + # замена mod_rewrite (как у apache)
 + location / {
 + if (!-e $request_filename ) {
 + rewrite ^(.*)$ /index.php?q=$1;
 + }
 + }
 +
 + # указываем наш fastcgi сервер как обработчик
 + location ~ \.php$ {
 + fastcgi_pass unix:/var/run/php-fcgi.sock;
 + fastcgi_index index.php;
 + fastcgi_param SCRIPT_FILENAME /usr/local/nginx/www/default/$fastcgi_script_name;
 + include fastcgi_params;
 + }
 + }
 + 
 +Для хоста <code>mysite.ru</code> файл конфигурации <code>/usr/local/nginx/conf/vhosts/mysite.ru</code> имеет следующее содержимое:
 + server {
 + listen 80;
 + server_name mysite.ru *.mysite.ru;
 +
 + root /usr/local/nginx/www/mysite.ru;
 + index index.php;
 +
 + location / {
 + if (!-e $request_filename ) {
 + rewrite ^(.*)$ /index.php?q=$1;
 + }
 + }
 +
 + location ~ \.php$ {
 + fastcgi_pass unix:/var/run/php-fcgi.sock;
 + fastcgi_index index.php;
 + fastcgi_param SCRIPT_FILENAME /usr/local/nginx/www/mysite.ru/$fastcgi_script_name;
 + include fastcgi_params;
 + }
 + }
 + 
 +Если понадобится добавить ещё хосты, то надо просто:
 +# создать соответствующий каталог в <code>/usr/local/nginx/www/</code>
 +# создать и отредактировать (см. выше) файл конфигурации для хоста в <code>/usr/local/nginx/conf/vhosts</code>
 + 
 +Всё! :)

Текущая версия


Содержание

[править] Установка spawn-fcgi

spawn-fcgi можно взять с его официальной странички: http://redmine.lighttpd.net/projects/spawn-fcgi

[править] Скачиваем spawn-fcgi

wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz

[править] Распаковываем spawn-fcgi

tar xvfz spawn-fcgi-1.6.3.tar.gz

[править] Устанавливаем spawn-fcgi

Заходим в каталог с распакованым spawn-fcgi и выполняем команды:

./configure --prefix=/usr
make
su make install

[править] Установка nginx

nginx можно взять с официального сайта: http://sysoev.ru/nginx/

[править] Скачиваем nginx

wget http://sysoev.ru/nginx/nginx-0.8.54.tar.gz

[править] Распаковываем nginx

tar xvfz nginx-0.8.54.tar.gz

[править] Устанавливаем nginx

Заходим в каталог с распакованым nginx и выполняем команды:

./configure
make
su make install

После инсталляции каталоги nginx будут находиться по пути: /usr/local/nginx

Подробнее про инсталляцию nginx написано здесь: http://sysoev.ru/nginx/docs/install.html

[править] Настройка nginx + spawn-fcgi

[править] Скрипт запуска/останова nginx и spawn-fcgi в Gentoo Linux

Скрипт следует разместить по следующему пути: /etc/init.d/nginx
и обязательно дать ему права на выполнение:

chmod +x /etc/init.d/nginx

Содержимое скрипта следующее:

#!/sbin/runscript
start(){
  # run fastcgi server
  exec 2>&1
  PHP_FCGI_CHILDREN=5 \
  PHP_FCGI_MAX_REQUESTS=1000 \
  exec /usr/bin/spawn-fcgi -n -s /var/run/php-fcgi.sock -n -u nobody -U nobody -- /usr/bin/php-cgi &

  # run nginx
  cd /usr/local/nginx/sbin
  ./nginx &
}

stop(){
  kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`
  killall -9 php-cgi
}

Запуск/останов делается командой:

/etc/init.d/nginx start # запуск
/etc/init.d/nginx stop # останов

Для автоматического запуска/останова при перезапуске VDS необходимо создать ссылку:

ln -s /etc/init.d/nginx /etc/runlevels/default/nginx

[править] Настройка виртуальных хостов в nginx

Допустим у нас будет два домена:

  • по умолчанию (default, когда к VDS обращаются по IP адресу без указания хоста)
  • mysite.ru

Для этого создадим следующие файлы и каталоги:

mkdir /usr/local/nginx/www
mkdir /usr/local/nginx/www/default
mkdir /usr/local/nginx/www/mysite.ru
chown -R nobody:nogroup /usr/local/nginx/www/*
mkdir /usr/local/nginx/conf/vhosts
touch /usr/local/nginx/conf/vhosts/default
touch /usr/local/nginx/conf/vhosts/mysite.ru

Основной файл конфигурации nginx /usr/local/nginx/conf/nginx.conf в минимальном виде выглядит так:

worker_processes  1;
 
events {
  worker_connections  1024;
}

http {
  include             mime.types;
  default_type        application/octet-stream;
  sendfile            on;
  keepalive_timeout   65;

  include             vhosts/*;
}

Для хоста по умолчанию файл конфигурации /usr/local/nginx/conf/vhosts/default имеет следующее содержимое:

server {
   listen 80;
   server_name _;

   root /usr/local/nginx/www/default;
   index index.html; # если сайт на PHP - заменить на index.php

   # замена mod_rewrite (как у apache)
   location / {
       if (!-e $request_filename ) {
           rewrite ^(.*)$ /index.php?q=$1;
       }
   }

   # указываем наш fastcgi сервер как обработчик
   location ~ \.php$ {
       fastcgi_pass   unix:/var/run/php-fcgi.sock;
       fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/www/default/$fastcgi_script_name;
       include        fastcgi_params;
   }
}

Для хоста mysite.ru файл конфигурации /usr/local/nginx/conf/vhosts/mysite.ru имеет следующее содержимое:

server {
   listen 80;
   server_name mysite.ru *.mysite.ru;

   root /usr/local/nginx/www/mysite.ru;
   index index.php;

   location / {
       if (!-e $request_filename ) {
           rewrite ^(.*)$ /index.php?q=$1;
       }
   }

   location ~ \.php$ {
       fastcgi_pass   unix:/var/run/php-fcgi.sock;
       fastcgi_index  index.php;
       fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/www/mysite.ru/$fastcgi_script_name;
       include        fastcgi_params;
   }
}

Если понадобится добавить ещё хосты, то надо просто:

  1. создать соответствующий каталог в /usr/local/nginx/www/
  2. создать и отредактировать (см. выше) файл конфигурации для хоста в /usr/local/nginx/conf/vhosts

Всё! :)

Личные инструменты