Коротко о главном
Nginx часто ставят перед приложением на Node.js, Python или Go. Он принимает TLS, отдаёт статику, балансирует нагрузку и скрывает backend от интернета. Настройка кажется простой, но ошибки в заголовках и таймаутах встречаются постоянно.
Обратный прокси упрощает сертификаты, кэширование и единую точку входа. Он позволяет перезапускать приложение без смены адреса и ограничивать доступ.
Nginx как обратный прокси выглядит простым снаружи, но именно детали определяют поведение под нагрузкой. Посмотрим на внутреннее устройство и тонкие настройки.
Как это устроено
Nginx как обратный прокси состоит из нескольких взаимодействующих частей: конфигурации, рабочего процесса и данных, с которыми он работает. Понимание этой схемы помогает предсказывать поведение системы и быстрее находить причину сбоя.
Обратный прокси упрощает сертификаты, кэширование и единую точку входа. Он позволяет перезапускать приложение без смены адреса и ограничивать доступ. Именно поэтому настройка через переменные окружения и конфигурационные файлы предпочтительнее ручных правок «на месте».
Разбор конфигурации
Начните с минимального рабочего варианта. Не копируйте большой конфиг целиком: добавляйте параметры по одному и проверяйте результат после каждого изменения.
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
}
Ключевые компоненты и их взаимодействие
1. Создайте конфиг сайта
Не правьте основной nginx.conf для каждого сайта. Используйте sites-available и симлинк в sites-enabled.
sudo nano /etc/nginx/sites-available/example.conf
sudo ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/
2. Проверьте и перезагрузите
nginx -t проверяет синтаксис. Reload применяет конфигурацию без разрыва соединений.
sudo nginx -t
sudo systemctl reload nginx
3. Включите HTTPS
Certbot получит сертификат и добавит редирект. Убедитесь, что домен указывает на сервер, а порт 80 доступен.
sudo certbot --nginx -d example.com -d www.example.com
sudo certbot renew --dry-run
4. Настройте WebSocket
Для WebSocket нужны заголовки Upgrade и Connection, иначе соединение будет сбрасываться.
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
5. Диагностируйте ошибки
Смотрите error.log и access.log. 502 обычно означает, что backend недоступен, 504 — таймаут.
sudo tail -f /var/log/nginx/error.log
curl -I https://example.com
Диагностика и тонкая настройка
Начинайте с журналов и проверки версии. Затем изолируйте проблему: конфигурация, права доступа, сеть или данные. Не меняйте несколько параметров одновременно — иначе невозможно понять, что именно помогло.
Практические советы
Эти рекомендации проверены на повседневных задачах. Начните с тех, которые закрывают вашу текущую боль, а не со всего списка сразу.
Совет 1. Не открывайте backend-порт в интернет, если он слушает localhost.
Не открывайте backend-порт в интернет, если он слушает localhost.
Совет 2. Передавайте X-Forwarded-* заголовки, иначе приложение видит неверный I
Передавайте X-Forwarded-* заголовки, иначе приложение видит неверный IP и схему.
Совет 3. Ограничивайте размер тела запроса для загрузок.
Ограничивайте размер тела запроса для загрузок.
Совет 4. Настройте gzip или brotli для текстовых ответов.
Настройте gzip или brotli для текстовых ответов.
Совет 5. Кэшируйте статику с версионированием имён.
Кэшируйте статику с версионированием имён.
Типичные ошибки
Ниже — сбои, которые встречаются чаще всего. Перед исправлением сохраните текущие конфиги и запишите, какие изменения вносите: так проще откатиться.
1. 502 Bad Gateway
Backend не запущен или слушает другой адрес. Проверьте systemctl status приложения и curl localhost:порт.
2. 504 Gateway Timeout
Увеличьте proxy_read_timeout или оптимизируйте запрос. Не ставьте бесконечный таймаут без причины.
3. Неправильный редирект на HTTP
Проверьте X-Forwarded-Proto и настройки приложения. Иногда нужен trust proxy.
Что улучшить после базовой настройки
Когда Nginx как обратный прокси работает предсказуемо, следующий шаг — наблюдаемость. Добавьте проверку состояния, которая отвечает на вопрос «жив ли сервис», и метрику, показывающую нагрузку. Без этого вы узнаёте о проблеме от пользователей, а не от системы.
Второе направление — воспроизводимость. Опишите установку и конфигурацию так, чтобы их можно было повторить на чистой машине: список пакетов, файлы настроек, порядок команд. Это одновременно документация, план восстановления и основа для автоматизации.
Не оптимизируйте то, что не измеряли. Сначала соберите базовые показатели, затем меняйте один параметр и сравнивайте результат. Иначе легко получить конфигурацию, которая выглядит сложнее, но работает не быстрее.
Итог
Понимание внутреннего устройства Nginx как обратный прокси экономит часы диагностики. Когда знаете, где хранится состояние и как компоненты общаются, ошибка перестаёт быть «магией».