user nginx;
worker_processes 8;
# Уменьшает число системных вызовов gettimeofday(),
# что приводит к увеличению производительности
timer_resolution 100ms;
worker_rlimit_nofile 100000;
# Директива задаёт приоритет рабочих процессов от -20 до 20
# (отрицательное число означает более высокий приоритет).
# Тут будьте осторожны, так как другие сервисы могут начать заметно тормозить.
# На наших серверах этот параметрт установлен в -5.
# Чем меньше значение — тем выше приоритет для nginx
worker_priority -5;
error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
#----------------------------------------------------------------------
# Events Module
#
# http://wiki.nginx.org/NginxHttpEventsModule
#
#----------------------------------------------------------------------
events {
worker_connections 2048;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
fastcgi_buffers 8 1024k;
fastcgi_buffer_size 1024k;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$gzip_ratio"';
# access_log off; # Отключаем логирование
access_log /var/log/nginx/access.log main;
charset utf-8; # Заставляем nginx принудительно отдавать в заголовках кодировку utf-8 для всех сайтов. ВАЖНО поставить, иначе гугл может индексить кракозяблы вместо русских букв
expires 240h;
# Задаёт максимально допустимый размер тела запроса клиента, указываемый в поле “Content-Length”
# заголовка запроса. Если размер больше заданного, то клиенту возвращается ошибка 413 (Request Entity Too Large).
# Следует иметь в виду, что браузеры не умеют корректно показывать эту ошибку. Установка аргумента размер в 0
# отключает проверку размера тела запроса клиента.
client_max_body_size 32m;
# размер буфера для чтения тела запроса клиента. Если тело запроса больше заданного буфера,
# то всё тело запроса или только его часть записывается во временный файл. По умолчанию
# размер одного буфера равен двум размерам страницы. На x86, других 32-битных платформах и
# x86-64 это 8K. На других 64-битных платформах это обычно 16K.
client_body_buffer_size 128k;
# Включить sendfile(). Использование sendfile() экономит
# системные вызовы, уменьшает число копирований данных,
# позволяет использовать меньше физической памяти.
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;
gzip on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types *;
# При значении 0 конфиг максимально готов к ddos. тут механизм таков, что ddos на сервер может идти не путем запроса всех страниц и получение страницы,
# а просто отправкой пакетов на запрос и разрыв соединения. А при keepalive_timeout 65; Nginx еще 65 секунд будет держать порт за пользователем.
# т.е. 100 посетителей в секунду и через 65 секунд кончатся все порты.
keepalive_timeout 0; # не стоит держать соединение, если оно прервалось. клиент может и обновить страничку, а серверу приходится держать лишний порт.
# keepalive_timeout 65; # Было такое значение раньше, во многих конфигах из нета стоит именно оно
limit_zone myzone $binary_remote_addr 10m;
# зная размер и примерное количество одновременно отдаваемых файлов, можно подобрать более подходящие значения
output_buffers 4 64k; # настройка для одного клиента, т.е. ему одному 4 буфера по 64 килобайта
# если строка запроса или поле заголовка запроса не помещаются полностью в этот буфер, то выделяются буферы большего размера,
# задаваемые директивой large_client_header_buffers
client_header_buffer_size 8k; # размер буфера для чтения заголовка запроса клиента.
# максимальное число и размер буферов для чтения большого заголовка запроса клиента. Строка запроса не должна превышать размера
# одного буфера, иначе клиенту возвращается ошибка 414 (Request-URI Too Large). Поле заголовка запроса также не должно превышать
# размера одного буфера, иначе клиенту возвращается ошибка 400 (Bad Request).
large_client_header_buffers 4 16k;
proxy_temp_file_write_size 64k;
# Load config files from the /etc/nginx/conf.d directory
# The default server is in conf.d/default.conf
include /etc/nginx/conf.d/*.conf;
### Nginx permanent (301) redirect from www.domain.com to domain.com
server {
listen MY_IP:80;
server_name ~^(www\.|ns1\.|ns2\.)(?<domain>.+)$;
rewrite ^ $scheme://$domain$request_uri? permanent; #301 redirect
}
server {
listen MY_IP:80;
server_name ~^(www\.)?(.+)$;
location / {
root /home/domen.com/site;
index index.php index.html index.htm;
}
error_page 404 /404.html;
location = /404.html {
root /home/domen.com/site/cssjs/404;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location /nginx_status { # Получаем информацию по текущему состоянию nginx
# Active connections — количество открытых соединений
# server accepts handled requests — Сервер принял 96296 соединения, обработал 96296 соединения и обработал 170563 запроса (1.77 запросов/соединение)
# Reading — количество запросов, заголовки которых nginx читает в данный момент
# Writing — количество запросов, тело которых читает nginx + количество запросов для которых nginx отдает данные
# Waiting — количетсво keep-alive соединений, расчитывается как: waiting = active — reading — writing
stub_status on;
access_log off;
}
######### 301 permanent redirect (i.e. from /faq.php to /faq/) #########
# 301 redirect from /index.php to /
if ( $request_uri ~ "^/index.(php|html?)" ) {
rewrite ^ /$1 permanent;
}
location ~ \.php$ {
root /home/domen.com/site;
try_files $uri =404;
fastcgi_pass unix:/tmp/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_read_timeout 3600; ## 1 час
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location ~ /\.ht {
deny all;
}
rewrite ^/en/?$ /?language_code=1&$args last;
rewrite ^/ru/?$ /?language_code=2&$args last;