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

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

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

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

К следующему изменению →
Строка 65: Строка 65:
Допустим у нас будет два домена: Допустим у нас будет два домена:
-* по умолчанию (default)+* по умолчанию (default, когда к VDS обращаются по IP адресу без указания хоста)
* mysite.ru * mysite.ru
Строка 79: Строка 79:
Основной файл конфигурации nginx в минимальном виде выглядит так: Основной файл конфигурации nginx в минимальном виде выглядит так:
worker_processes 1; worker_processes 1;
- +
events { events {
worker_connections 1024; worker_connections 1024;
Строка 97: Строка 97:
listen 80; listen 80;
server_name _; server_name _;
- +
root /usr/local/nginx/www/default; root /usr/local/nginx/www/default;
index index.html; # если сайт на PHP - заменить на index.php index index.html; # если сайт на PHP - заменить на index.php
- +
# замена mod_rewrite (как у apache) # замена mod_rewrite (как у apache)
location / { location / {
Строка 107: Строка 107:
} }
} }
- +
 + # указываем наш fastcgi сервер как обработчик
location ~ \.php$ { location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fcgi.sock; fastcgi_pass unix:/var/run/php-fcgi.sock;
Строка 115: Строка 116:
} }
} }
 +
 +Для хоста <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>

Версия 10:40, 31 января 2011


Содержание

Установка 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
}

Настройка виртуальных хостов в 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 в минимальном виде выглядит так:

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