Настройка Nginx часто превращается в поиск по документации и форумам, когда нужно быстро решить конкретную задачу: проксировать приложение, настроить безопасный SSL или ограничить нагрузку на API. Эта статья — ваша коллекция проверенных в работе конфигурационных блоков Nginx, актуальных на 2026 год. Здесь собраны готовые решения для повседневных сценариев DevOps-инженера и системного администратора: от базового proxy_pass и современных настроек TLS до эффективного кеширования статики и защиты rate limiting. Каждый пример сопровождается подробными комментариями по ключевым директивам, что позволяет не просто скопировать код, но и понять его логику. Эти конфигурации составлены с учетом актуальных практик безопасности и оптимизации производительности, экономя ваше время на чтение официальной документации.
Базовый каркас и проксирование приложений: от простого к сложному
Начнем с основ. Приведем минимальный, но безопасный и оптимизированный конфигурационный файл Nginx в качестве шаблона. Затем перейдем к блокам location с proxy_pass: проксирование на бэкенд на localhost, проксирование с передачей заголовков (X-Forwarded-For), проксирование WebSocket-соединений. Для каждого блока — краткие комментарии к ключевым директивам (proxy_set_header, proxy_http_version для WS). Акцент на том, что это база, проверенная в работе.
Шаблон конфигурационного файла: основа для всех примеров
Этот шаблон nginx.conf служит надежной основой для всех последующих примеров. Он включает оптимальные на 2026 год значения для производительности и базовые директивы безопасности.
# /etc/nginx/nginx.conf
# Основной контекст событий и процессов
user nginx;
worker_processes auto; # Автоматическое определение по количеству ядер CPU
error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;
# Контекст событий: настройка сетевых соединений
events {
worker_connections 1024; # Максимальное число соединений на worker-процесс
use epoll; # Эффективный метод обработки для Linux
multi_accept on;
}
# Основной HTTP-контекст
http {
# Базовые настройки MIME-типов и кодировки
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;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
client_max_body_size 20M; # Лимит на размер загружаемых файлов
client_body_timeout 12;
client_header_timeout 12;
# Безопасность: скрываем версию Nginx в заголовках
server_tokens off;
# Включаем поддержку сжатия Gzip
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss;
# Подключаем файлы с конфигурацией виртуальных хостов
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Ключевые пояснения:
worker_processes auto: Nginx автоматически определяет оптимальное количество worker-процессов по числу ядер CPU.worker_connections 1024: Ограничивает одновременные соединения, предотвращая исчерпание файловых дескрипторов.server_tokens off: Критически важная директива безопасности, скрывающая версию Nginx в HTTP-заголовках, чтобы усложнить жизнь злоумышленникам.client_max_body_size 20M: Защищает от перегрузки сервера большими загрузками файлов.
Проксирование на бэкенд-приложение: классический proxy_pass
Самый частый сценарий — направить входящие HTTP-запросы с Nginx на backend-приложение (Gunicorn, Node.js, Java и т.д.). Вот готовый блок для виртуального хоста.
# /etc/nginx/sites-available/myapp.conf
server {
listen 80;
server_name app.example.com;
root /var/www/html;
index index.html;
# Основной location для проксирования всего трафика на бэкенд
location / {
# Адрес и порт backend-приложения
proxy_pass http://localhost:8000;
# Стандартный набор заголовков для корректной работы приложения за прокси
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 X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
# Важно для корректного формирования ссылок в редиректах от бэкенда
proxy_redirect off;
# Альтернатива: proxy_redirect http://localhost:8000/ http://app.example.com/;
# Таймауты для работы с медленными бэкендами
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# Отключает буферизацию ответов для некоторых streaming-приложений
# proxy_buffering off;
}
# Отдельный location для API с префиксом /api/
location /api/ {
proxy_pass http://localhost:8001/; # Обратите внимание на слэш в конце
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-For: Передает реальный IP-адрес клиента бэкенду, что критически важно для логирования, анализа и систем безопасности приложения.proxy_set_header X-Forwarded-Proto: Сообщает бэкенду, по какому протоколу (http/https) клиент обратился к Nginx.proxy_redirect: Контролирует, как Nginx будет модифицировать заголовкиLocationиRefreshв ответах от бэкенда. Значениеoffотключает модификацию, что подходит, если бэкенд сам умеет формировать правильные URL.
Проксирование WebSocket-соединений (для Telegram Bots API, live-чатов)
Для работы с real-time приложениями (чаты, уведомления, Telegram Bots API через WebSocket) требуется специальная конфигурация. Стандартный proxy_pass не поддерживает upgrade протокола.
server {
listen 80;
server_name ws.example.com;
location / {
# Проксирование обычного HTTP-трафика, если нужно
proxy_pass http://backend_app;
# ... стандартные proxy_set_header
}
# Специальный location для WebSocket-соединений
location /ws/ {
proxy_pass http://localhost:8080; # Ваш WebSocket-сервер
# Обязательные директивы для апгрейда соединения до WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Стандартные заголовки для идентификации клиента
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_read_timeout 3600s;
proxy_send_timeout 3600s;
}
# Пример для специфичного эндпоинта, как в некоторых MCP-серверах
location /api/v1/mcp/ {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# ... остальные заголовки
}
}
Ключевые пояснения:
proxy_http_version 1.1: WebSocket-протокол требует HTTP/1.1.proxy_set_header Upgrade $http_upgradeиproxy_set_header Connection "upgrade": Эти заголовки инициируют смену протокола с HTTP на WebSocket (процесс upgrade). Без них соединение останется обычным HTTP.- Увеличенные
proxy_read_timeoutиproxy_send_timeoutнеобходимы, так как WebSocket-соединения могут оставаться открытыми часами.
Безопасность и TLS: современные SSL-конфигурации на 2026 год
Предоставляем готовый блок server для HTTPS на порту 443. Включаем актуальные на 2026 год рекомендации по протоколам (TLS 1.2, 1.3) и наборам шифров (приоритет ECDHE, отказ от RC4, DES). Настройка строгой транспортной безопасности (HSTS). Важно: объясняем, почему выбран каждый параметр с точки зрения безопасности и совместимости. Упоминаем необходимость использования актуальных сертификатов (Let's Encrypt). Для получения детальных инструкций по работе с сертификатами и полной настройке HTTPS рекомендуем наше полное руководство по SSL/TLS и HTTPS в Nginx.
Оптимальная конфигурация SSL/TLS для баланса безопасности и совместимости
Эта конфигурация обеспечивает высокий уровень безопасности, сохраняя совместимость с большинством современных клиентов. Она соответствует рекомендациям Mozilla SSL Configuration Generator на 2026 год.
server {
listen 443 ssl http2; # http2 для повышения производительности
listen [::]:443 ssl http2;
server_name example.com www.example.com;
# Пути к SSL-сертификатам (актуальные, например, от Let's Encrypt)
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# Настройка цепочки доверия (OCSP Stapling)
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
ssl_stapling on;
ssl_stapling_verify on;
# Современные и безопасные протоколы. TLS 1.0 и 1.1 устарели и небезопасны.
ssl_protocols TLSv1.2 TLSv1.3;
# Приоритетный набор шифров. Обеспечивает Forward Secrecy.
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off; # В TLS 1.3 клиент выбирает шифр
# Параметры сессий для уменьшения нагрузки при повторных handshake
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# Диффи-Хеллман параметры для усиления безопасности
ssl_dhparam /etc/nginx/dhparam.pem; # Генерируется командой: openssl dhparam -out /etc/nginx/dhparam.pem 4096
# Заголовок HSTS (настраивается в следующем подразделе)
# add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# ... остальная конфигурация (root, location и т.д.)
}
Ключевые пояснения:
ssl_protocols TLSv1.2 TLSv1.3: TLS 1.3 обеспечивает большую безопасность и скорость handshake. Поддержка старых, уязвимых протоколов (SSLv3, TLS 1.0, 1.1) отключена.ssl_ciphers: Набор начинается с шифров на основе ECDHE (Elliptic-curve Diffie–Hellman), которые обеспечивают Perfect Forward Secrecy (PFS). Это означает, что даже если злоумышленник получит приватный ключ сервера в будущем, он не сможет расшифровать ранее перехваченный трафик.ssl_stapling on: OCSP Stapling ускоряет проверку отзыва сертификата, повышая безопасность и производительность.ssl_dhparam: Использование уникальных, достаточно длинных (4096 бит) параметров Диффи-Хеллмана критически важно для стойкости ключевого обмена.
Автоматический редирект с HTTP на HTTPS и настройка HSTS
Для принудительного использования защищенного соединения всеми пользователями необходим редирект и заголовок HSTS.
# Сервер-блок, который слушает порт 80 (HTTP) и делает редирект 301 на HTTPS
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
# Основной редирект для основного домена
return 301 https://example.com$request_uri;
}
# Дополнительный блок для редиректа с www на non-www (или наоборот) уже на HTTPS
server {
listen 443 ssl http2;
server_name www.example.com;
# ... все настройки SSL как в примере выше ...
# Редирект с www на non-www
return 301 https://example.com$request_uri;
}
# Основной HTTPS сервер для example.com (non-www)
server {
listen 443 ssl http2;
server_name example.com;
# ... настройки SSL ...
# Заголовок HTTP Strict Transport Security (HSTS)
# Информирует браузер, что этот сайт должен загружаться только по HTTPS.
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
# Параметры:
# max-age=63072000 — срок действия политики (2 года).
# includeSubDomains — политика применяется ко всем поддоменам.
# preload — НЕ добавляйте эту директиву, пока не зарегистрируете домен в списке предзагрузки HSTS (hstspreload.org).
# always — заголовок добавляется ко всем ответам, даже к ошибкам.
# ... остальная конфигурация сайта ...
}
Важное предупреждение: Директиву preload в HSTS следует добавлять только после тщательного тестирования и регистрации домена в официальном списке предзагрузки. Её удаление из этого списка — крайне долгий процесс. Для более детального изучения современных практик безопасности рекомендуем наше руководство «Защита Nginx в 2026».
Производительность: кеширование статики и ограничение скорости запросов
Два ключевых сценария оптимизации. 1) Кеширование: настройка location для статических файлов с директивами expires, add_header Cache-Control. Объяснение разницы между статикой и динамическим контентом. 2) Rate Limiting: использование limit_req_zone и limit_req для ограничения запросов к API или форме логина. Примеры с разными зонами (по IP, по ключу API).
Эффективное кеширование статических файлов: снижаем нагрузку в разы
Правильное кеширование CSS, JS, изображений и шрифтов на стороне клиента и прокси-сервера — самый простой способ ускорить сайт и снизить нагрузку на диск.
http {
# ... другие настройки из базового шаблона ...
# Определяем зону для прокси-кеширования (опционально, для кеширования на стороне сервера)
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
# ... настройки server ...
# Location для статических файлов с долгим кешированием на стороне клиента
location ~* \.(jpg|jpeg|png|gif|ico|webp|svg|svgz|mp4|webm|ogg|mp3|wav|ttf|otf|woff|woff2|eot)$ {
expires 365d; # Браузер будет хранить файл в кеше 1 год
add_header Cache-Control "public, immutable";
# 'immutable' говорит браузеру, что файл не изменится, и не нужно проверять обновления.
# Подходит для версионированных файлов (style.a1b2c3.css).
access_log off; # Отключаем логирование статики для уменьшения нагрузки на диск I/O
}
location ~* \.(css|js)$ {
expires 30d;
add_header Cache-Control "public";
# Для неверсионированных CSS/JS лучше не использовать 'immutable'
}
# Отключение кеширования для разработки (например, для staging-окружения)
# location ~* \.(css|js|jpg|jpeg|png|gif)$ {
# expires -1;
# add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate";
# }
# Пример прокси-кеширования ответов от бэкенда (для редко меняющегося контента)
location /api/catalog/ {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status;
}
}
}
Ключевые пояснения:
expires 365d: Устанавливает HTTP-заголовокExpiresс датой истечения срока действия кеша в будущем. Браузер не будет запрашивать этот файл с сервера до истечения срока.add_header Cache-Control "public, immutable": Современный и более приоритетный (чемExpires) заголовок.public— ресурс можно кешировать публично (например, в CDN).immutable— указывает, что контент никогда не меняется, что позволяет браузеру пропускать условные запросы.proxy_cache_path: Определяет зону и параметры для кеширования ответов от бэкенда прямо на диске Nginx. Это мощный инструмент для разгрузки динамических приложений.
Ограничение скорости запросов (rate limiting): защита API и приложений
Модуль ngx_http_limit_req_module позволяет защитить приложение от DDoS-атак, брутфорса и злоупотреблений, ограничивая количество запросов с одного IP-адреса или по другому ключу.
http {
# Определяем зону для ограничения запросов (rate limit zone).
# Название зоны: 'limit_by_ip', размер: 10 мегабайт.
# Ключ: $binary_remote_addr (IP-адрес клиента в бинарном формате, занимает меньше места).
# Частота: 10 запросов в секунду (rate=10r/s).
limit_req_zone $binary_remote_addr zone=limit_by_ip:10m rate=10r/s;
# Зона для ограничения по ключу API (если он передается в заголовке)
limit_req_zone $http_x_api_key zone=limit_by_api_key:10m rate=100r/m;
server {
# ...
# Применяем ограничение ко всему сайту, но с большим лимитом
location / {
limit_req zone=limit_by_ip burst=20 nodelay;
# burst=20 — разрешает до 20 запросов сверх лимита, они будут обработаны с задержкой.
# nodelay — запросы в пределах burst обрабатываются без задержки, но счетчик заполнения зоны все равно ведется.
proxy_pass http://backend;
}
# Строгое ограничение для API
location /api/v1/ {
# 5 запросов в секунду с одного IP
limit_req zone=limit_by_ip burst=5 nodelay;
proxy_pass http://backend_api;
}
# Особо строгое ограничение для эндпоинта входа (логина) — защита от брутфорса
location /api/v1/auth/login {
# 3 запроса в минуту с одного IP
limit_req zone=limit_by_ip burst=2 delay=3;
# delay=3 — первые 3 запроса сверх лимита (burst) будут обработаны с задержкой, остальные отклонены с кодом 503.
proxy_pass http://backend_auth;
# Возвращаем понятный код ошибки при превышении лимита
limit_req_status 429; # Too Many Requests
}
# Ограничение по ключу API (например, для внешних интеграций)
location /api/external/ {
# 100 запросов в минуту на один API-ключ
limit_req zone=limit_by_api_key burst=30;
# Если ключ не передан, ограничение не сработает. Нужна дополнительная проверка.
if ($http_x_api_key = "") {
return 403;
}
proxy_pass http://backend_external;
}
# Страница с информацией о превышении лимита (опционально)
error_page 429 /429.html;
location = /429.html {
root /usr/share/nginx/html;
internal;
}
}
}
Ключевые пояснения:
limit_req_zone: Определяет зону и правило ограничения в контекстеhttp. Параметрrateможет быть в r/s (запросов в секунду) или r/m (в минуту).burst: Разрешает кратковременные всплески трафика сверх установленного лимита. Запросы сверх лимита, но в пределах burst, ставятся в очередь и обрабатываются с задержкой.nodelay/delay: Сnodelayзапросы в пределах burst обрабатываются сразу (но место в зоне занимают). Сdelayили без него — с задержкой. Это тонкая настройка поведения при всплесках.limit_req_status 429: Позволяет изменить стандартный код ошибки 503 на более семантически верный 429 (Too Many Requests).
Для комплексной защиты инфраструктуры, включая настройку балансировки нагрузки с health checks, изучите наше руководство «Nginx как балансировщик нагрузки: продвинутая настройка».
Полезные механики: аутентификация, редиректы и обработка ошибок
Каталог готовых решений для частых задач: 1) Базовая HTTP-аутентификация (auth_basic) для закрытия части сайта. 2) Типовые редиректы: с www на non-www (или наоборот), с одного домена на другой, со старого пути на новый (301 Moved Permanently). 3) Кастомизация страниц ошибок (error_page 404 /404.html;). Для каждого — минимальный рабочий пример с пояснением.
Базовая HTTP-аутентификация для админ-зон и staging
Простой и быстрый способ ограничить доступ к staging-окружению, админ-панели или любой другой директории.
# 1. Создаем файл с логинами и паролями (зашифрованными)
# Утилита htpasswd (пакет apache2-utils или httpd-tools)
# sudo htpasswd -c /etc/nginx/.htpasswd admin
# Затем вводим пароль. Для добавления второго пользователя без ключа -c:
# sudo htpasswd /etc/nginx/.htpasswd developer
server {
# ...
location /admin/ {
# Включаем базовую аутентификацию
auth_basic "Administration Area"; # Текст в диалоговом окне браузера
auth_basic_user_file /etc/nginx/.htpasswd; # Путь к файлу с паролями
# Важно: эта аутентификация передает пароль в base64, без шифрования.
# Она ДОЛЖНА использоваться ТОЛЬКО поверх HTTPS (SSL/TLS).
# Для продакшена рассмотрите более надежные методы (OAuth, JWT).
# ... остальная конфигурация location (proxy_pass, root и т.д.) ...
}
location /staging/ {
auth_basic "Staging Environment";
auth_basic_user_file /etc/nginx/.htpasswd_staging;
# ...
}
}
Типовые редиректы: www, домены и изменение структуры URL
Шаблоны для самых распространенных сценариев перенаправления при миграциях и SEO-оптимизации. Всегда используйте код 301 (Moved Permanently) для постоянных редиректов — это важно для SEO.
server {
listen 80;
server_name old-domain.com www.old-domain.com;
# 1. Редирект со старого домена на новый (сохраняя путь)
return 301 https://new-domain.com$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
# ... настройки SSL для example.com и www.example.com ...
# 2. Редирект с www на non-www (или наоборот) внутри HTTPS-сервера
if ($host = www.example.com) {
return 301 https://example.com$request_uri;
}
# Альтернатива: использовать отдельный server-блок, как показано в разделе про HSTS.
# 3. Редирект со старого URL на новый (изменение структуры сайта)
location = /old-page.html {
return 301 /blog/new-article-title;
}
# 4. Групповой редирект с помощью map (для многих URL)
# В контексте http:
# map $request_uri $new_uri {
# /old-path1 /new-path1;
# /old-path2 /new-path2;
# default '';
# }
# Затем в server:
# if ($new_uri) {
# return 301 $new_uri;
# }
# 5. Редирект с HTTP на HTTPS (уже рассмотрен в предыдущем разделе)
# ...
}
Важно: Использование директивы if в контексте location в Nginx имеет свои особенности и может приводить к неожиданному поведению. Для простых редиректов, как в примерах выше, это допустимо. Для сложной логики лучше использовать map или rewrite.
Кастомизация страниц ошибок 404, 502 и других
Замена стандартных страниц Nginx на кастомные улучшает пользовательский опыт и позволяет сохранить дизайн сайта.
server {
# ...
# Определяем свои файлы для кодов ошибок
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
# Location для страницы 404
location = /404.html {
root /usr/share/nginx/html; # или /var/www/my-site/error_pages
internal; # Важно! Страница доступна только при внутреннем редиректе Nginx
}
# Location для страниц 5xx ошибок
location = /50x.html {
root /usr/share/nginx/html;
internal;
}
# Пример: если бэкенд недоступен, показываем кастомную 502 страницу
# и логируем факт ошибки отдельно.
location @backend_unavailable {
root /usr/share/nginx/html;
try_files /502.html =502;
access_log /var/log/nginx/backend_error.log main;
}
location / {
proxy_pass http://backend;
# Если бэкенд возвращает 502, 503 или 504, переходим в именованный location
proxy_intercept_errors on;
error_page 502 503 504 = @backend_unavailable;
}
# Рекомендация: делайте страницы ошибок простыми, без зависимостей
# от CSS/JS вашего основного сайта (они могут тоже не загрузиться).
# Включайте на них навигацию на главную и контакты поддержки.
}
Проверка, отладка и заключение
После копирования и адаптации конфигураций критически важно проверить их корректность перед применением в production-среде.
- Проверка синтаксиса: Всегда запускайте команду
sudo nginx -t. Она проверяет конфигурационные файлы на наличие синтаксических ошибок и корректность путей. Вывод должен быть:nginx: configuration file /etc/nginx/nginx.conf test is successful. - Аккуратная перезагрузка конфигурации: Если проверка прошла успешно, примените изменения без остановки сервера:
sudo nginx -s reload. Это graceful reload, который не обрывает существующие соединения. - Мониторинг и отладка:
- Логи ошибок:
sudo tail -f /var/log/nginx/error.log— отслеживайте ошибки в реальном времени. - Логи доступа:
sudo tail -f /var/log/nginx/access.log— следите за входящими запросами. - Проверка заголовков: Убедитесь, что настройки (кеширование, HSTS, безопасность) применяются:
curl -I https://your-domain.com. - Проверка SSL: Используйте онлайн-сервисы вроде SSL Labs (SSLLabs.com) для аудита безопасности TLS-конфигурации.
- Логи ошибок:
Эта статья — ваша шпаргалка с коллекцией рабочих конфигурационных блоков Nginx для 2026 года. Вы можете адаптировать их под свои нужды, комбинировать и расширять. Помните, что мир веб-технологий и безопасности не стоит на месте: периодически проверяйте актуальность настроек TLS, шифров и версий модулей. Официальная документация Nginx (nginx.org) остается вашим главным источником для углубленного изучения всех возможностей этого мощного веб-сервера. Для решения более комплексных задач, таких как развертывание полноценного reverse proxy для Docker-окружений, обратитесь к нашему руководству «Настройка Nginx Reverse Proxy в Linux».