Обратный прокси Nginx принимает запросы от посетителей сайта и перенаправляет их на другой сервер или приложение. Его часто используют, чтобы приложения, работающие на портах вроде 3000, были доступны через доменное имя, а их внутренние порты не открывались для доступа из интернета.
В этом руководстве вы настроите Nginx на Ubuntu для перенаправления запросов к локальному приложению, подключите домен и включите HTTPS.
Что такое обратный прокси Nginx?
Обратный прокси находится между посетителями и вашим серверным приложением.
Вместо прямого подключения к приложению на порту 3000 посетители подключаются к Nginx через стандартные порты HTTP или HTTPS.
Nginx перенаправляет запрос приложению и возвращает его ответ.
Схема прохождения запроса выглядит так:
Посетитель → Nginx → Серверное приложение
Такую схему часто используют для веб-приложений на Node.js, Python и других платформах. Она также позволяет настроить терминацию TLS, балансировку нагрузки и централизованную обработку запросов.
Что потребуется
Перед началом вам понадобятся:
- Сервер с Ubuntu 24.04 LTS и доступом к sudo.
- Доступ к серверу по SSH.
- Доменное имя, указывающее на публичный IP-адрес вашего сервера.
- Серверное приложение, принимающее подключения на локальном порту.
В этом примере мы будем использовать порт 3000.
Если вы ещё не работали с SSH, прежде чем продолжить, прочитайте наше руководство по командам SSH для начинающих.

Шаг 1. Установите Nginx на Ubuntu
Подключитесь к серверу с Ubuntu по SSH.
Обновите индекс пакетов и установите Nginx:
sudo apt update
sudo apt install nginx -y
Проверьте, запущен ли Nginx:
sudo systemctl status nginx
Вы должны увидеть статус active (running).
Если Nginx не запущен, выполните:
sudo systemctl enable --now nginx
Вы также можете открыть публичный IP-адрес сервера в браузере. Если доступ по HTTP разрешён, появится стандартная приветственная страница Nginx.
Если вы используете UFW, разрешите трафик HTTP и HTTPS:
sudo ufw allow 'Nginx Full'
Также проверьте правила межсетевого экрана, настроенные у вашего хостинг-провайдера. Не отключайте межсетевой экран ради доступа к Nginx.
Шаг 2. Запустите тестовое серверное приложение
Прежде чем настраивать обратный прокси, нам понадобится приложение, которому Nginx будет перенаправлять запросы.
Для простого теста создайте временный каталог:
mkdir -p ~/nginx-proxy-test
cd ~/nginx-proxy-test
Создайте простую HTML-страницу:
echo '<h1>Nginx Reverse Proxy Works!</h1>' > index.html
Теперь запустите встроенный HTTP-сервер Python:
python3 -m http.server 3000 --bind 127.0.0.1
Он будет отдавать тестовую страницу на порту 3000, доступном только через локальный адрес обратной связи.
Оставьте этот терминал открытым и запустите вторую SSH-сессию.
Проверьте, отвечает ли приложение:
curl http://127.0.0.1:3000
Вы должны увидеть:
<h1>Nginx Reverse Proxy Works!</h1>
Этот сервер Python используется только для демонстрации. Для рабочего приложения используйте рекомендованные для него сервер приложений и способ управления службой.
Шаг 3. Создайте конфигурацию обратного прокси Nginx
Создайте новый блок server для Nginx:
sudo nano /etc/nginx/sites-available/app.example.com
Замените app.example.com своим доменом.
Добавьте следующую конфигурацию:
server {
listen 80;
server_name app.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;
}
}
Сохраните файл.
Как работает конфигурация
listen 80обеспечивает приём HTTP-запросов.server_nameзадаёт домен, запросы к которому должен обрабатывать Nginx.proxy_passперенаправляет запросы приложению на порту 3000.proxy_set_headerпередаёт серверному приложению полезную информацию об исходном запросе.
Серверное приложение должно правильно и безопасно обрабатывать переданные заголовки. Настраивайте приложение на доверие к ним только в том случае, если запросы поступают через ваш доверенный прокси.
Шаг 4. Включите и проверьте конфигурацию
Включите новый блок server:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/
Если ссылка уже существует, не создавайте её повторно.
Проверьте конфигурацию на ошибки:
sudo nginx -t
Если проверка прошла успешно, перезагрузите конфигурацию Nginx:
sudo systemctl reload nginx
Теперь откройте:
http://app.example.com
Если DNS указывает на нужный сервер, а тестовое серверное приложение всё ещё работает, вы должны увидеть:
Nginx Reverse Proxy Works!
Если вместо этого появилась стандартная страница Nginx, проверьте DNS-записи домена и настройку server_name.
Шаг 5. Включите HTTPS с помощью Let’s Encrypt
Для общедоступного сайта используйте HTTPS, чтобы не оставлять трафик незашифрованным.
Сначала убедитесь, что домен указывает на нужный сервер, а входящие соединения на порту 80 разрешены. Это необходимо для стандартной проверки при выдаче сертификата по HTTP.
Установите Certbot официально рекомендуемым способом через Snap:
sudo snap install --classic certbot
Если команда certbot ещё недоступна, создайте ссылку на неё:
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
Затем запросите сертификат:
sudo certbot --nginx -d app.example.com
Следуйте подсказкам. Certbot может получить сертификат и настроить Nginx для обслуживания вашего домена по HTTPS.
После этого проверьте обновление сертификата:
sudo certbot renew --dry-run
Откройте:
https://app.example.com
Теперь тестовое приложение должно загружаться через зашифрованное соединение.
Шаг 6. Проверьте работу обратного прокси
Проверьте ответ по HTTPS:
curl -I https://app.example.com
Для тестового серверного приложения на Python ответ HTTP 200 OK означает, что запрос успешно дошёл до приложения.
Вы также можете проверить, какие процессы принимают подключения на сервере:
sudo ss -ltnp
Nginx должен принимать подключения на настроенных публичных портах HTTP и HTTPS, а тестовое серверное приложение — на 127.0.0.1:3000.
Помните, что временный сервер Python остановится, когда вы завершите его сеанс терминала. Рабочие приложения следует запускать под управлением менеджера процессов, например systemd.
Распространённые проблемы с обратным прокси Nginx
502 Bad Gateway
Обычно это означает, что Nginx не смог получить корректный ответ от серверного приложения.
Проверьте, работает ли приложение и правильно ли указан порт в proxy_pass.
В нашем руководстве по устранению ошибки 502 Bad Gateway в Nginx подробнее рассматриваются журналы, вышестоящие службы и проблемы с подключением.
504 Gateway Timeout
Ошибка 504 возникает, когда шлюз не получает вовремя ответ от вышестоящего сервера.
Прежде чем увеличивать время ожидания, выясните, почему приложение медленно обрабатывает запросы, и проверьте производительность серверного приложения.
Дополнительные инструкции есть в нашем руководстве по устранению ошибки 504 Gateway Timeout.
Домен не открывается
Проверьте, указывает ли A-запись домена на правильный публичный IP-адрес, открыты ли нужные порты в межсетевом экране и соответствует ли блок server в Nginx запрашиваемому имени хоста.
Часто задаваемые вопросы
Директива proxy_pass указывает Nginx, куда перенаправлять запросы, например HTTP-приложению, работающему на 127.0.0.1:3000.
Да. Вы можете настроить отдельные домены, поддомены или пути URL для перенаправления запросов разным серверным приложениям.
Нет. Обратный прокси можно протестировать по IP-адресу или локально. Однако с доменом проще разместить приложение в открытом доступе и получить стандартный сертификат HTTPS.
Да. Nginx с открытым исходным кодом поддерживает работу в качестве обратного прокси без коммерческой лицензии.
Заключение
Вы настроили обратный прокси Nginx на Ubuntu, перенаправили запросы локальному приложению и включили HTTPS.
Эту базовую конфигурацию можно адаптировать для приложений на Node.js, Python и других приложений, работающих по HTTP, изменив адрес серверного приложения в proxy_pass.
Прежде чем использовать эту конфигурацию в рабочей среде, убедитесь, что приложение запускается автоматически, работает с подходящими правами доступа и для него настроены надлежащие средства мониторинга и защиты.