Коротко о главном
Nginx часто ставят перед приложением на Node.js, Python или Go. Он принимает TLS, отдаёт статику, балансирует нагрузку и скрывает backend от интернета. Настройка кажется простой, но ошибки в заголовках и таймаутах встречаются постоянно.
Обратный прокси упрощает сертификаты, кэширование и единую точку входа. Он позволяет перезапускать приложение без смены адреса и ограничивать доступ.
Nginx как обратный прокси — инструмент, который стоит освоить, если вы регулярно работаете в Linux. Ниже — путь от установки до уверенной повседневной работы: без предположений, что всё уже настроено само.
Зачем нужен Nginx как обратный прокси
Nginx как обратный прокси решает вполне конкретные задачи: Проксирование приложения, HTTPS, WebSocket и диагностика ошибок 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
Пошаговая настройка
После установки переходите к базовому сценарию. Команды ниже выполняйте от пользователя с достаточными правами, но не запускайте всё под root без необходимости.
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. Кэшируйте статику с версионированием имён.
Кэшируйте статику с версионированием имён.
Практический сценарий
Представьте типовую задачу: нужно развернуть Nginx как обратный прокси на одной машине, проверить работу и передать доступ коллеге. Начните с чистой системы или снапшота, чтобы результат был воспроизводим. Запишите все команды в отдельный файл — это одновременно шпаргалка и черновик будущей автоматизации.
Дальше действуйте короткими шагами: установка, минимальная конфигурация, проверка, затем расширение. После каждого шага фиксируйте, что именно изменилось и как это проверить. Такой журнал экономит время, когда через месяц понадобится повторить настройку на другом сервере или объяснить её коллеге.
Порядок работ для этого сценария выглядит так:
- Создайте конфиг сайта
- Проверьте и перезагрузите
- Включите HTTPS
- Настройте WebSocket
- Диагностируйте ошибки
Отдельно продумайте, что произойдёт при сбое. Для Nginx как обратный прокси важно заранее знать, где хранятся данные, как их скопировать и сколько времени займёт восстановление. Если ответа нет, не двигайтесь дальше: сначала закройте этот пробел, потом добавляйте новые возможности.
Типичные ошибки
Ниже — сбои, которые встречаются чаще всего. Перед исправлением сохраните текущие конфиги и запишите, какие изменения вносите: так проще откатиться.
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 как обратный прокси — это не «поставил и забыл». Рабочая конфигурация складывается из понимания задачи, аккуратной установки и проверки результата. Начните с базового сценария, затем добавляйте только те возможности, которые действительно используете.