nginx как reverse proxy: проксируем приложение правильно
Ваше приложение слушает 127.0.0.1:3000, а наружу нужен домен с HTTPS на 443 порту. Задачу решает nginx в роли reverse proxy. Разберём рабочий конфиг, TLS-сертификат и частые ошибки.
Зачем reverse proxy
['Приложение (Node, Python, Go) обычно слушает локальный порт. Выставлять его напрямую в интернет небезопасно и неудобно: нет HTTPS, нет балансировки, нет кэша статики.', 'nginx принимает запросы на 80/443, терминирует TLS и проксирует их на backend. Один сервер может обслуживать десятки приложений на разных доменах.']Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для веб-приложенияУстановка
['apt update && apt install nginx -y\nsystemctl enable --now nginx', 'Проверьте, что стартовая страница открывается по IP сервера. Если нет — смотрите firewall: порт 80 должен быть открыт (ufw allow 80/tcp).']
Конфиг reverse proxy
['Создаём сайт в/etc/nginx/sites-available/app.conf:', 'server {\n listen 80;\n server_name example.com;\n\n location / {\n proxy_pass http://127.0.0.1:3000;\n proxy_http_version 1.1;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection "upgrade";\n }\n}', 'Заголовки Upgrade и Connection нужны для WebSocket — без них живые соединения будут рваться.', 'ln -s /etc/nginx/sites-available/app.conf /etc/nginx/sites-enabled/\nnginx -t\nsystemctl reload nginx']
HTTPS за одну команду
["Бесплатный сертификат Let's Encrypt ставится через certbot, который сам правит конфиг nginx.", 'apt install certbot python3-certbot-nginx -y\ncertbot --nginx -d example.com', 'Certbot настроит редирект с HTTP на HTTPS и автопродление. Проверить продление: certbot renew --dry-run.']
Gzip и частые ошибки
['Включаем сжатие в/etc/nginx/nginx.conf для ускорения отдачи:', 'gzip on;\ngzip_types text/plain text/css application/json application/javascript;', '- 502 Bad Gateway — backend не запущен или слушает не тот порт. Проверьте
ss -tlnp | grep 3000. - 413 Request Entity Too Large — добавьте
client_max_body_size 50m;. - Изменения не применились — вы забыли
nginx -tиsystemctl reload nginx.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для веб-приложенияЧастые вопросы
В чём разница reload и restart?
reload перечитывает конфиг без разрыва соединений, restart полностью перезапускает процесс. В проде почти всегда нужен reload.
Как проксировать несколько приложений?
Создайте отдельный server-блок на каждый домен со своим proxy_pass. nginx маршрутизирует по server_name.
Certbot выдал ошибку — что делать?
Чаще всего домен ещё не указывает на сервер (A-запись не прописана) или порт 80 закрыт firewall. Проверьте оба условия.