CentOS: Nginx установка и базовая настройка

Решили попробовать веб сервер nginx. И решил набросать статью по установке и базовой настройки.

Установим nginx с поддержкой php. Добавляем необходимые репозитории – как описано здесь. И далее ставим nginx

# yum install nginx

Теперь ставим php с необходимыми пакетами
# yum install php php-bz2 php-ctype php-dom php-gd php-gettext php-iconv php-imap php-json php-mbstring php-mysql php-mysqli php-openssl php-pcre php-session php-xml php-zlib

Далее ставим spawn-fcgi

# yum install spawn-fcgi

Далее качаем скрипт для запуска php_cgi, разархивируем его и кладем в /etc/init.d

# wget http://bash.cyberciti.biz/dl/419.sh.zip
# unzip 419.sh.zip
# mv 419.sh /etc/init.d/php_cgi
# chmod +x /etc/init.d/php_cgi

Запускаем

# /etc/init.d/php_cgi start
# netstat -nlp | grep php-cgi
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      3486/php-cgi 

Не забываем добавить скрипт в автоматическую загрузку

chkconfig --add php_cgi
chkconfig php_cgi on

Обновляем nginx.conf – раскоментируем строки

location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }

И перегружаем nginx. Теперь можно проверить – создав файл с расширением php и записав в него строчку

<?php phpinfo(); ?>

и открыв этот файл в браузере
Далее настроим виртуальные хосты. Для начала создадим папку vhosts и подправим nginx.conf

#
# ngnix.conf
#
user              nginx;
worker_processes  1;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
#
# main server
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
sendfile        on;
keepalive_timeout  65;
gzip  on;
    #
    # The default server
    #
    server {
        listen      example.com:80 default;
        server_name  example.com;
        access_log  /var/log/nginx/access.log  main;
        error_log  /var/log/nginx/error.log;
        location / {
            root    /usr/share/nginx/html;
            index   index.html;
        }
        error_page  404              /404.html;
        location = /404.html {
            root   /usr/share/nginx/html;
        }
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
        location ~ /\.ht {
            deny  all;
        }
    }
    # Load config files from the /etc/nginx/conf.d directory
    include /etc/nginx/conf.d/*.conf;
    # Load vhosts configs
    include /etc/nginx/vhosts/*.conf;
}

Теперь создаем файл virtual.com.conf в папке vhosts и вносим в него

server {
        listen  virtual.com:80;
        server_name  virtual.com;

        access_log  /usr/www/virtual.com/logs/access.log  main;
        error_log  /usr/www/virtual.com/logs/error.log;

        location / {
            root   /usr/www/virtual.com/in;
            index  index.php index.html index.htm;
        }

        error_page  404              /index.php;
        location = /index.php {
            root   /usr/www/virtual.com/in;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/www/virtual.com/in$fastcgi_script_name;
            include        fastcgi_params;
        }

        location ~ /\.ht {
            deny  all;
        }
}

Вот и все – кладем сайт в папку /usr/www/virtual.com/in/ – и заходим на него вводя адрес virtual.com