# Количество форков основого процесса. Рекомендуется по одному форку на каждое процессорное ядрое
worker_processes 4;
# Для обработки очереди используем механизм kqueue
# На каждый форк устанавливаем ограничение в 1024 tcp-соединения
events {
worker_connections 1024;
use kqueue;
}
http {
# Не будем включать в http-заголовки информацию о сервере. Это немного повысит производительность.
server_tokens off;
# Описание MIME-типов
include mime.types;
# Неизвестные документы получат этот MIME-тип
default_type application/octet-stream;
# Без нужды в логи мусорить не будем
access_log /dev/null;
# Тонкие настройки обработки запросов
sendfile on;
aio off;
tcp_nodelay on;
tcp_nopush on;
# Именно столько и не больше будут жить устойчивые соединения
# Слишком большое значение приведёт к большому количеству полуоткрытых сокетов
# Слишком маленькое - не позволит клиентам насладиться всеми прелестями HTTP/1.1
keepalive_timeout 3;
# Настройки проксирования
client_body_buffer_size 128K;
client_header_buffer_size 128K;
client_max_body_size 1M;
large_client_header_buffers 1 1k;
proxy_temp_path /usr/home/nginx/proxy_temp;
proxy_cache_path /usr/home/nginx/proxy_cache levels=1:2 keys_zone=one:30m max_size=1g;
client_body_temp_path /usr/home/nginx/client_body_temp;
fastcgi_temp_path /usr/home/nginx/fastcgi_temp;
proxy_pass_header Cookie;
proxy_pass_header Set-Cookie;
proxy_cache_key $scheme$proxy_host$request_uri$http_cookie$http_set-cookie;
# Сжатие позволит отдавать контент клиентам быстрее
gzip on;
gzip_types application/x-javascript application/javascript text/css text/plain application/xml application/rss+xml text/vnd.wap.wml;
gzip_vary on;
gzip_comp_level 9;
# Описание апстрима - место, куда мы будем пересылать http-запросы
# Количество бэков может быть любым
# Параметр weight описывает приоритет бэка
# Параметр max_fails описывает количество сбоев подряд прежде чем бэк считаемся мёртвым
# Параметр fail_timeout указывает время, через которое можно попробовать снова использовать мёртвые бэки
upstream project_backends {
server back1 weight=10 max_fails=3 fail_timeout=30s;
server back2 weight=10 max_fails=3 fail_timeout=30s;
}
# Собственно описание сервера
server {
# Слушаем 80-й порт
listen *:80;
# Имя севера
server_name front;
# При пересылке запросов не будем менять значение заголовка Host
server_name_in_redirect off;
# Имя файла журнала
access_log /usr/home/logs/nginx-access.log;
# Все запросы
location / {
# Пересылаем запросы на бэкенды
proxy_pass http://project_backends;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 30;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 8k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 10m;
}
# Запросы к статике
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {
# Принудительно указываем заголовок Expire
expires 30d;
# Запросы по прежнему пересылаем на бэкенды
proxy_pass http://project_backends;
# Однако здесь мы их кэшируем на один час
# Это позволяет немного разгрузить бэкенды
proxy_cache_valid 60m;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_key $scheme$proxy_host$request_uri$host;
proxy_cache one;
}
}
}