Коротко о главном
Nginx часто ставят перед приложением на Node.js, Python или Go. Он принимает TLS, отдаёт статику, балансирует нагрузку и скрывает backend от интернета. Настройка кажется простой, но ошибки в заголовках и таймаутах встречаются постоянно.
Обратный прокси упрощает сертификаты, кэширование и единую точку входа. Он позволяет перезапускать приложение без смены адреса и ограничивать доступ.
В тестовой среде Nginx как обратный прокси запускается за пару минут. В рабочей — важны воспроизводимость, резервные копии, мониторинг и понятный план восстановления. Разберём, как подойти к этому системно.
Что меняется в рабочей среде
В тестовой среде достаточно, чтобы Nginx как обратный прокси запускался. В продакшене добавляются требования к доступности, безопасности и восстановлению. Чем раньше вы зафиксируете эти требования, тем меньше придётся переделывать.
Базовая установка
Установка
В Debian, Ubuntu и Linux Mint используется пакетный менеджер APT:
sudo apt install nginx certbot python3-certbot-nginx
В Fedora и RHEL-совместимых системах пакет ставится через DNF:
sudo dnf install nginx certbot python3-certbot-nginx
В Arch Linux и производных пакет доступен в официальных репозиториях:
sudo pacman -S nginx certbot certbot-nginx
Настройка и проверка
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
Конфигурация для повторяемого развёртывания
Начните с минимального рабочего варианта. Не копируйте большой конфиг целиком: добавляйте параметры по одному и проверяйте результат после каждого изменения.
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. Не открывайте 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 как обратный прокси должен быть предсказуемым: версии зафиксированы, изменения проходят проверку, резервные копии существуют, а сбои видны в мониторинге. Чек-лист выше — минимальная отправная точка.