Справочники
Директивы nginx
Частые директивы nginx: синтаксис, где их можно писать, значение по умолчанию и рабочий пример. Выберите контекст — останутся только директивы, допустимые в этом блоке.
69 директив для этого контекста. Директива не в своём блоке — ошибка «is not allowed here» при nginx -t.
Показано 69 из 69 директив.
Процессы и соединения
Контекст main — верхний уровень nginx.conf, вне любых блоков.
user www-data;
user — От чьего имени работают рабочие процессы.
Синтаксис: user пользователь [группа]; · Контекст: main · По умолчанию: nobody nobody
worker_processes auto;
worker_processes — Число рабочих процессов; auto — по числу ядер.
Синтаксис: worker_processes число | auto; · Контекст: main · По умолчанию: 1
events { worker_connections 4096; }
worker_connections — Сколько соединений держит один рабочий процесс, включая соединения к бэкендам.
Синтаксис: worker_connections число; · Контекст: events · По умолчанию: 512
worker_rlimit_nofile 65535;
worker_rlimit_nofile — Лимит открытых файлов на процесс; должен быть не меньше worker_connections.
Синтаксис: worker_rlimit_nofile число; · Контекст: main · По умолчанию: —
multi_accept on;
multi_accept — Принимать все новые соединения разом, а не по одному.
Синтаксис: multi_accept on | off; · Контекст: events · По умолчанию: off
pid /run/nginx.pid;
pid — Файл с PID главного процесса.
Синтаксис: pid файл; · Контекст: main · По умолчанию: logs/nginx.pid
include /etc/nginx/conf.d/*.conf;
include — Вставить содержимое других файлов конфига.
Синтаксис: include файл | маска; · Контекст: любой · По умолчанию: —
error_log /var/log/nginx/error.log warn;
error_log — Журнал ошибок; уровни от debug до emerg.
Синтаксис: error_log файл [уровень]; · Контекст: main, http, server, location · По умолчанию: logs/error.log error
Серверы и адреса
listen 443 ssl; listen [::]:443 ssl;
listen — На каком адресе и порту принимать запросы. default_server — сервер для запросов с незнакомым Host.
Синтаксис: listen адрес[:порт] [default_server] [ssl] …; · Контекст: server · По умолчанию: *:80 | *:8000
server_name example.com www.example.com;
server_name — Имена сервера: точные, с * в начале или конце, или регулярка с ~.
Синтаксис: server_name имя …; · Контекст: server · По умолчанию: ""
root /var/www/site/public;
root — Корень файлов: к нему дописывается весь путь запроса.
Синтаксис: root путь; · Контекст: http, server, location, if · По умолчанию: html
location /static/ { alias /srv/assets/; }
alias — Замена части пути: адрес location вырезается и заменяется на alias. В отличие от root.
Синтаксис: alias путь; · Контекст: location · По умолчанию: —
index index.html index.php;
index — Какой файл отдавать на запрос каталога.
Синтаксис: index файл …; · Контекст: http, server, location · По умолчанию: index.html
location ~* \.(css|js|png)$ { expires 30d; }
location — Блок настроек для части адресов. Порядок: точное =, затем самый длинный префикс, ^~ отключает регулярки, затем регулярки ~ и ~* по порядку в файле.
Синтаксис: location [ = | ~ | ~* | ^~ ] адрес { … } · Контекст: server, location · По умолчанию: —
try_files $uri $uri/ /index.html;
try_files — Проверить файлы по очереди и отдать первый существующий, иначе — последний аргумент.
Синтаксис: try_files файл … uri | =код; · Контекст: server, location · По умолчанию: —
error_page 404 /404.html; error_page 500 502 503 504 /50x.html;
error_page — Своя страница для кодов ошибок.
Синтаксис: error_page код … [=[ответ]] uri; · Контекст: http, server, location, if · По умолчанию: —
location /protected/ { internal; }
internal — Location доступен только для внутренних перенаправлений, снаружи — 404.
Синтаксис: internal; · Контекст: location · По умолчанию: —
autoindex on;
autoindex — Показывать список файлов каталога.
Синтаксис: autoindex on | off; · Контекст: http, server, location · По умолчанию: off
default_type application/octet-stream;
default_type — MIME-тип, если расширение не нашлось в types.
Синтаксис: default_type тип; · Контекст: http, server, location · По умолчанию: text/plain
server_tokens off;
server_tokens — Показывать ли версию nginx в заголовке Server и на страницах ошибок.
Синтаксис: server_tokens on | off | build | строка; · Контекст: http, server, location · По умолчанию: on
Редиректы и переменные
if внутри location — известный источник сюрпризов: безопасно в нём только return и rewrite … last.
return 301 https://$host$request_uri;
return — Сразу ответить кодом или редиректом. Проще и быстрее rewrite.
Синтаксис: return код [текст | URL]; · Контекст: server, location, if · По умолчанию: —
rewrite ^/old/(.*)$ /new/$1 permanent;
rewrite — Переписать адрес по регулярке. last — заново искать location, break — остаться в текущем.
Синтаксис: rewrite регулярка замена [last | break | redirect | permanent]; · Контекст: server, location, if · По умолчанию: —
if ($request_method = POST) { return 405; }
if — Условие по переменной: =, !=, ~, ~*, -f, -d, -e.
Синтаксис: if (условие) { … } · Контекст: server, location · По умолчанию: —
set $backend "http://127.0.0.1:3000";
set — Задать переменную.
Синтаксис: set $переменная значение; · Контекст: server, location, if · По умолчанию: —
map $http_upgrade $connection_upgrade { default upgrade; "" close; }
map — Вычислить переменную по таблице соответствий. Ленивое: считается только когда используется.
Синтаксис: map строка $переменная { … } · Контекст: http · По умолчанию: —
Проксирование
Слеш в конце proxy_pass меняет смысл: proxy_pass http://app/ вырезает префикс location из адреса, без слеша — передаёт адрес как есть.
proxy_pass http://127.0.0.1:3000;
proxy_pass — Передать запрос бэкенду или группе upstream.
Синтаксис: proxy_pass URL; · Контекст: location, if · По умолчанию: —
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_set_header X-Forwarded-Proto $scheme;
proxy_set_header — Заголовки запроса к бэкенду. Наследуется, только если на текущем уровне нет ни одного своего.
Синтаксис: proxy_set_header поле значение; · Контекст: http, server, location · По умолчанию: Host $proxy_host; Connection close;
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade;
proxy_http_version — Версия HTTP к бэкенду; 1.1 нужна для keepalive и WebSocket.
Синтаксис: proxy_http_version 1.0 | 1.1; · Контекст: http, server, location · По умолчанию: 1.0
proxy_read_timeout 300s;
proxy_read_timeout — Сколько ждать между двумя чтениями ответа бэкенда. Долгие отчёты и SSE упираются сюда.
Синтаксис: proxy_read_timeout время; · Контекст: http, server, location · По умолчанию: 60s
proxy_connect_timeout 5s;
proxy_connect_timeout — Сколько ждать установки соединения с бэкендом; обычно больше 75 с не бывает.
Синтаксис: proxy_connect_timeout время; · Контекст: http, server, location · По умолчанию: 60s
proxy_buffering off;
proxy_buffering — Буферизовать ответ бэкенда. Для потоков (SSE, долгие ответы) выключают.
Синтаксис: proxy_buffering on | off; · Контекст: http, server, location · По умолчанию: on
proxy_redirect http://127.0.0.1:3000/ /;
proxy_redirect — Переписать Location и Refresh в ответах бэкенда.
Синтаксис: proxy_redirect default | off | было стало; · Контекст: http, server, location · По умолчанию: default
proxy_cache_path /var/cache/nginx keys_zone=api:10m max_size=1g inactive=60m;
proxy_cache_path — Где хранить кэш и зона для ключей в памяти (1 МБ ≈ 8 тыс. ключей).
Синтаксис: proxy_cache_path путь keys_zone=имя:размер …; · Контекст: http · По умолчанию: —
proxy_cache api; proxy_cache_valid 200 10m;
proxy_cache — Включить кэш ответов в указанной зоне.
Синтаксис: proxy_cache зона | off; · Контекст: http, server, location · По умолчанию: off
proxy_next_upstream error timeout http_502 http_503;
proxy_next_upstream — В каких случаях пробовать следующий сервер группы.
Синтаксис: proxy_next_upstream error | timeout | http_502 … | off; · Контекст: http, server, location · По умолчанию: error timeout
fastcgi_pass unix:/run/php/php8.3-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass — Передать запрос FastCGI-серверу, например PHP-FPM.
Синтаксис: fastcgi_pass адрес; · Контекст: location, if · По умолчанию: —
Балансировка (upstream)
upstream app { server 127.0.0.1:3000; server 127.0.0.1:3001; }
upstream — Группа серверов для proxy_pass; по умолчанию — по кругу с весами.
Синтаксис: upstream имя { … } · Контекст: http · По умолчанию: —
server 10.0.0.5:8080 weight=3 max_fails=3 fail_timeout=30s;
server — Сервер группы и его параметры.
Синтаксис: server адрес [weight=n] [max_fails=n] [fail_timeout=время] [backup] [down]; · Контекст: upstream · По умолчанию: weight=1 max_fails=1 fail_timeout=10s
keepalive 32;
keepalive — Держать открытыми соединения к бэкендам. Нужны proxy_http_version 1.1 и пустой Connection.
Синтаксис: keepalive число; · Контекст: upstream · По умолчанию: —
least_conn;
least_conn — Отправлять на сервер с наименьшим числом активных соединений.
Синтаксис: least_conn; · Контекст: upstream · По умолчанию: —
ip_hash;
ip_hash — Привязывать клиента к серверу по IP (липкие сессии).
Синтаксис: ip_hash; · Контекст: upstream · По умолчанию: —
hash $request_uri consistent;
hash — Выбирать сервер по хэшу ключа; consistent — согласованное хэширование.
Синтаксис: hash ключ [consistent]; · Контекст: upstream · По умолчанию: —
Заголовки, кэш и сжатие
add_header, как и proxy_set_header, наследуется с верхнего уровня только когда на текущем нет ни одного своего. Один add_header в location молча отменяет все заголовки безопасности из server.
add_header Strict-Transport-Security "max-age=31536000" always;
add_header — Добавить заголовок в ответ. Без always — только для кодов 200, 201, 204, 206, 301, 302, 303, 304, 307, 308.
Синтаксис: add_header имя значение [always]; · Контекст: http, server, location, if · По умолчанию: —
expires 30d;
expires — Выставить Expires и Cache-Control: max-age.
Синтаксис: expires [modified] время | epoch | max | off; · Контекст: http, server, location, if · По умолчанию: off
gzip on;
gzip — Сжимать ответы gzip.
Синтаксис: gzip on | off; · Контекст: http, server, location, if · По умолчанию: off
gzip_types text/css application/javascript application/json image/svg+xml;
gzip_types — Какие MIME-типы сжимать, помимо text/html (он сжимается всегда).
Синтаксис: gzip_types тип …; · Контекст: http, server, location · По умолчанию: text/html
gzip_comp_level 5;
gzip_comp_level — Степень сжатия; выше 5 почти не выигрывает, но тратит процессор.
Синтаксис: gzip_comp_level 1…9; · Контекст: http, server, location · По умолчанию: 1
gzip_min_length 1024;
gzip_min_length — Не сжимать ответы короче (по Content-Length).
Синтаксис: gzip_min_length длина; · Контекст: http, server, location · По умолчанию: 20
gzip_vary on;
gzip_vary — Добавлять Vary: Accept-Encoding, чтобы кэши не перепутали версии.
Синтаксис: gzip_vary on | off; · Контекст: http, server, location · По умолчанию: off
sendfile on;
sendfile — Отдавать файлы системным вызовом sendfile без копирования в память процесса.
Синтаксис: sendfile on | off; · Контекст: http, server, location, if · По умолчанию: off
client_max_body_size 50m;
client_max_body_size — Максимальный размер тела запроса; больше — 413. 0 — без ограничения.
Синтаксис: client_max_body_size размер; · Контекст: http, server, location · По умолчанию: 1m
keepalive_timeout 65s;
keepalive_timeout — Сколько держать открытым соединение с клиентом между запросами.
Синтаксис: keepalive_timeout время [время_в_заголовке]; · Контекст: http, server, location · По умолчанию: 75s
HTTPS
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate — Сертификат вместе с промежуточными (fullchain).
Синтаксис: ssl_certificate файл; · Контекст: http, server · По умолчанию: —
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_certificate_key — Закрытый ключ сертификата.
Синтаксис: ssl_certificate_key файл; · Контекст: http, server · По умолчанию: —
ssl_protocols TLSv1.2 TLSv1.3;
ssl_protocols — Разрешённые версии TLS.
Синтаксис: ssl_protocols [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3]; · Контекст: http, server · По умолчанию: TLSv1.2 TLSv1.3 (с 1.23.4)
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_ciphers — Набор шифров в формате OpenSSL (на TLS 1.3 не влияет).
Синтаксис: ssl_ciphers шифры; · Контекст: http, server · По умолчанию: HIGH:!aNULL:!MD5
ssl_session_cache shared:SSL:10m;
ssl_session_cache — Кэш TLS-сессий между процессами: повторное подключение без полного рукопожатия.
Синтаксис: ssl_session_cache off | none | shared:имя:размер; · Контекст: http, server · По умолчанию: none
ssl_session_timeout 1d;
ssl_session_timeout — Сколько живёт сессия в кэше.
Синтаксис: ssl_session_timeout время; · Контекст: http, server · По умолчанию: 5m
http2 on;
http2 — Включить HTTP/2 (директива с 1.25.1; раньше — параметр http2 у listen).
Синтаксис: http2 on | off; · Контекст: http, server · По умолчанию: off
Доступ, лимиты и журналы
allow 10.0.0.0/8; deny all;
allow / deny — Разрешить или запретить по IP. Правила проверяются по порядку до первого совпадения.
Синтаксис: allow адрес | CIDR | all; · Контекст: http, server, location · По умолчанию: —
auth_basic "Закрытая зона"; auth_basic_user_file /etc/nginx/.htpasswd;
auth_basic — Запросить логин и пароль (Basic).
Синтаксис: auth_basic строка | off; · Контекст: http, server, location · По умолчанию: off
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
limit_req_zone — Зона ограничения частоты запросов.
Синтаксис: limit_req_zone ключ zone=имя:размер rate=скорость; · Контекст: http · По умолчанию: —
limit_req zone=api burst=20 nodelay;
limit_req — Применить ограничение частоты; burst — очередь сверх скорости.
Синтаксис: limit_req zone=имя [burst=n] [nodelay]; · Контекст: http, server, location · По умолчанию: —
limit_req_status 429;
limit_req_status — Код ответа тем, кто превысил лимит; обычно ставят 429.
Синтаксис: limit_req_status код; · Контекст: http, server, location · По умолчанию: 503
limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn perip 20;
limit_conn — Ограничить число одновременных соединений (зона — limit_conn_zone).
Синтаксис: limit_conn зона число; · Контекст: http, server, location · По умолчанию: —
access_log /var/log/nginx/access.log main;
access_log — Журнал запросов.
Синтаксис: access_log путь [формат] | off; · Контекст: http, server, location, if · По умолчанию: logs/access.log combined
log_format timed '$remote_addr [$time_local] "$request" $status $request_time';
log_format — Формат строки журнала.
Синтаксис: log_format имя строка …; · Контекст: http · По умолчанию: combined
set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For;
set_real_ip_from — Каким прокси доверять при подмене адреса клиента (вместе с real_ip_header).
Синтаксис: set_real_ip_from адрес | CIDR; · Контекст: http, server, location · По умолчанию: —
location = /nginx_status { stub_status; allow 127.0.0.1; deny all; }
stub_status — Страница с числом соединений и запросов — для мониторинга.
Синтаксис: stub_status; · Контекст: server, location · По умолчанию: —