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

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

Перейти к: навигация, поиск


Содержание

[править] Установка 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

Всё! :)

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