Установка и настройка связки 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;
}
}
Если понадобится добавить ещё хосты, то надо просто:
- создать соответствующий каталог в
/usr/local/nginx/www/ - создать и отредактировать (см. выше) файл конфигурации для хоста в
/usr/local/nginx/conf/vhosts
Всё! :)
