Introducing ZYNOO General Purpose & CPU Optimized Servers   Learn More >

Как настроить обратный прокси Nginx на Ubuntu

Обратный прокси Nginx принимает запросы от посетителей сайта и перенаправляет их на другой сервер или приложение. Его часто используют, чтобы приложения, работающие на портах вроде 3000, были доступны через доменное имя, а их внутренние порты не открывались для доступа из интернета.

В этом руководстве вы настроите Nginx на Ubuntu для перенаправления запросов к локальному приложению, подключите домен и включите HTTPS.

Что такое обратный прокси Nginx?

Обратный прокси находится между посетителями и вашим серверным приложением.

Вместо прямого подключения к приложению на порту 3000 посетители подключаются к Nginx через стандартные порты HTTP или HTTPS.

Nginx перенаправляет запрос приложению и возвращает его ответ.

Схема прохождения запроса выглядит так:

Посетитель → Nginx → Серверное приложение

Такую схему часто используют для веб-приложений на Node.js, Python и других платформах. Она также позволяет настроить терминацию TLS, балансировку нагрузки и централизованную обработку запросов.

Нужен VPS для настройки Nginx?
Размещайте свои приложения с полным доступом к серверу и гибким выбором ресурсов.
Посмотреть тарифы VPS →

Что потребуется

Перед началом вам понадобятся:

  • Сервер с Ubuntu 24.04 LTS и доступом к sudo.
  • Доступ к серверу по SSH.
  • Доменное имя, указывающее на публичный IP-адрес вашего сервера.
  • Серверное приложение, принимающее подключения на локальном порту.

В этом примере мы будем использовать порт 3000.

Если вы ещё не работали с SSH, прежде чем продолжить, прочитайте наше руководство по командам SSH для начинающих.

Как настроить обратный прокси Nginx

Шаг 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.

504 Gateway Timeout

Ошибка 504 возникает, когда шлюз не получает вовремя ответ от вышестоящего сервера.

Прежде чем увеличивать время ожидания, выясните, почему приложение медленно обрабатывает запросы, и проверьте производительность серверного приложения.

Домен не открывается

Проверьте, указывает ли A-запись домена на правильный публичный IP-адрес, открыты ли нужные порты в межсетевом экране и соответствует ли блок server в Nginx запрашиваемому имени хоста.

Часто задаваемые вопросы

Что такое proxy_pass в Nginx?

Директива proxy_pass указывает Nginx, куда перенаправлять запросы, например HTTP-приложению, работающему на 127.0.0.1:3000.

Может ли Nginx работать как обратный прокси для нескольких приложений?

Да. Вы можете настроить отдельные домены, поддомены или пути URL для перенаправления запросов разным серверным приложениям.

Нужен ли домен для обратного прокси Nginx?

Нет. Обратный прокси можно протестировать по IP-адресу или локально. Однако с доменом проще разместить приложение в открытом доступе и получить стандартный сертификат HTTPS.

Бесплатен ли обратный прокси Nginx?

Да. Nginx с открытым исходным кодом поддерживает работу в качестве обратного прокси без коммерческой лицензии.

Заключение

Вы настроили обратный прокси Nginx на Ubuntu, перенаправили запросы локальному приложению и включили HTTPS.

Эту базовую конфигурацию можно адаптировать для приложений на Node.js, Python и других приложений, работающих по HTTP, изменив адрес серверного приложения в proxy_pass.

Прежде чем использовать эту конфигурацию в рабочей среде, убедитесь, что приложение запускается автоматически, работает с подходящими правами доступа и для него настроены надлежащие средства мониторинга и защиты.

Table of Content

Ошибка 502 Bad Gateway в Nginx обычно означает, что Nginx не смог получить корректный ответ

Ошибка 504 Gateway Timeout возникает, когда сервер, выполняющий роль шлюза или прокси, не получает вовремя

MCP-сервер — это программа, которая позволяет ИИ-приложениям подключаться к внешним инструментам, сервисам и источникам данных

Build your next project with ZYNOO

From your first website to demanding applications, choose the resources and control you need.

Shared Hosting

Start your blog or business website with cPanel, LiteSpeed and CloudLinux.

VPS Hosting

Grow your websites and applications with NVMe storage, KVM virtualization and full root access.

Dedicated Servers

Power demanding projects with your own physical server, dedicated resources and control over your environment.

Прокрутить вверх