Содержание:
Пакет веб-сервера Nginx доступен во многих дистрибутивах linux (Gentoo, Debian, Ubuntu, RHEL, CentOS, SLES). Установка в Ubuntu выглядит следующим образом:
root@pc:/# apt-get install nginx
root@pc:/# service nginx start
Если установка прошла успешно, nginx поприветсвует по адресу http://127.0.0.1:80/:
В состав пакета включена конфигурация по умолчанию - /etc/nginx/nginx.conf:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
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"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Рассмотрим основные параметры:
Параметр worker_processes по умолчанию равен 1. Иными словами все запросы будут обрабатываться в 1 потоке, используя 1 ядро процессора. Для максимальной производительности лучше сделать равным количеству ядер процессора или установить в "auto", чтобы nginx сам "распознал" их количество:
worker_processes auto;
В совокупности с worker_processes стоит также увеличить и максимальное количество соединений на процесс. За это отвечает параметр worker_conenctions:
worker_connections 2048;
Наряду с увеличением количества подключений, также необходимо позаботиться о лимите открытых файлов. За это отвеччает параметр worker_rlimit_nofile:
worker_rlimit_nofile 4096; #Значение по умолчанию отсутствует
Для уменьшения объема пересылаемого трафика и увеличения скорости доставки контента пользователю стоит включить компрессию. Nginx реализует алгоритм сжатия gzip:
gzip on;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_disable "msie6";
В браузерах Internet Explorer версии 6 и ниже сжатие не работает. Отключить сжатие для этих браузеров можно директивой gzip_disable, указав в качестве значения специальную маску “msie6”
/etc/nginx/nginx.conf после внесения правок:
user nginx;
worker_processes auto;
worker_rlimit_nofile 4096;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 2048;
}
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"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
}
Виртуальный сервер описывается в секции server { ... } в рамках контекста http { ... }. Возможно создание нескольких серверов в рамках одного контекста.
В качестве отправной точки, возьмем виртуальный сервер для веб сайта использующего php и fastcgi:
user nginx;
worker_processes auto;
worker_rlimit_nofile 4096;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 2048;
}
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"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name *.domain.tld;
root /var/www/;
index index.php index.html index.htm;
rewrite ^/robots.txt /static/robots.txt last;
location ^~ /static/ {
try_files $uri =404;
}
location / {
# First attempt to serve request as file, then
# as directory, then fall back to index.php
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
include fastcgi_params;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
}
}
}
Данный виртуальный сервер обрабатывает запросы с доменным именем domain.tld. Корневая директория сайта находится в каталоге /var/www/.
Рассмотрим основные параметры:
Параметр listen используется для указания ip адреса и порта или пути для UNIX-сокета, на которых сервер будет принимать запросы Можно указать адрес и порт, либо только адрес или только порт. Кроме того, адрес может быть именем хоста:
listen 80;
Параметр server_name задает имя виртуального сервера. В именах сервера можно использовать звёздочку (“*”) и регулярные выражения. В случае если имя задано как “$hostname” nginx использует имя хоста (машины):
server_name *.domain.ltd;
Параметр index определяет файлы, которые будут использоваться в качестве индекса. В имени файла можно использовать переменные. Наличие файлов проверяется в порядке их перечисления. В конце списка может стоять файл с абсолютным путём:
index index.php index.html index.htm;
Параметр rewrite применяется для изменения URI запроса. Директивы выполняются последовательно, в порядке их следования в конфигурационном файле:
rewrite ^/robots.txt /static/robots.txt last;
Параметр location используется для распределения запросов по их URI. location может быть задан префиксной строкой или регулярным выражением. При сопоставлении проверяются location’ы, заданные префиксными строками (префиксные location’ы). Среди них ищется location с совпадающим префиксом максимальной длины и запоминается. Затем проверяются регулярные выражения, в порядке их следования в конфигурационном файле. Проверка регулярных выражений прекращается после первого же совпадения, и используется соответствующая конфигурация. Если совпадение с регулярным выражением не найдено, то используется конфигурация запомненного ранее префиксного location’а. Например:
location ^~ /static/ {
try_files $uri =404;
}
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
include fastcgi_params;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
}
Запросы будут обработаны следующим образом:
URI Запроса | Выбранный location |
---|---|
“/” | location / { ... } |
“/index.html” | location / { ... } |
“/static/document.html” | location /static/ { ... } |
“/static/images/1.gif” | location ^~ /static/ { ... } |
“/static/index.php” | location ~ \.php$ { ... } |