Быстрый старт Настройка Обновлено 8 Nginx, Linux, VPS

Nginx на VPS: базовая настройка реверс-прокси

Пошаговое руководство по настройке Nginx в качестве реверс-прокси на VPS: от подготовки сервера до проверки конфигурации.

nginxreverse proxyvpsнастройкареверс-прокси
Содержание
КороткоСтатья объясняет, как превратить VPS с Nginx в реверс-прокси для внутренних сервисов. Вы узнаете, как установить Nginx, создать конфигурацию с proxy_pass, проверить её и перезапустить сервер. Также рассмотрены типичные ошибки и ответы на частые вопросы.

Зачем нужен реверс-прокси и как он работает на VPS

Реверс-прокси — это промежуточный сервер, который принимает клиентские запросы и направляет их к бэкенд-приложениям. На VPS такая схема используется повсеместно: например, у вас есть Node.js, Python или Go приложение, которое слушает на локальном порту (3000, 8080 и т.д.), а Nginx выступает внешним шлюзом, принимая стандартные 80/443 порты.

Преимущества очевидны: Nginx эффективно распределяет нагрузку, может кэшировать контент, терминировать SSL/TLS, а также скрывать внутреннюю структуру серверов. Базовая настройка реверс-прокси сводится к простому правилу: все запросы, пришедшие на определённый домен (или IP), Nginx пересылает на указанный бэкенд-адрес. В этой статье мы разберём именно такую минимальную конфигурацию без дополнительных «рюшечек» — только то, что нужно для быстрого деплоя.

Подготовка VPS и установка Nginx

Перед началом убедитесь, что ваш VPS работает под управлением Linux (Debian, Ubuntu, CentOS или их производных). Подключитесь к нему через SSH. Обновите индекс пакетов и установите Nginx из официального репозитория вашего дистрибутива:

sudo apt update
sudo apt install nginx

Для CentOS/RHEL используйте sudo yum install nginx. После установки проверьте статус службы:

sudo systemctl status nginx

Если Nginx не запущен — запустите его и добавьте в автозагрузку:

sudo systemctl start nginx
sudo systemctl enable nginx

Дальше важно проверить, что ваш бэкенд действительно работает. Допустим, у вас есть приложение, которое слушает 127.0.0.1:3000. Выполните запрос с сервера:

curl http://127.0.0.1:3000

Если получили ответ — всё в порядке. Если нет, разберитесь с вашим приложением: убедитесь, что оно запущено и привязано к правильному интерфейсу.

Базовая настройка реверс-прокси в Nginx

Nginx хранит виртуальные хосты в каталоге /etc/nginx/sites-available//sites-enabled/ на Debian/Ubuntu, или в /etc/nginx/conf.d/ на CentOS. Создадим новый конфигурационный файл. В Debian/Ubuntu:

sudo nano /etc/nginx/sites-available/my-app

Вставьте минимальную конфигурацию:

server ⟨br⟩    listen 80;
server_name example.com www.example.com;

location / {
proxy_pass http://127.0.0.1:3000;
include proxy_params;
}
}

Объяснение: listen 80 говорит Nginx слушать 80-й порт (HTTP). server_name — доменное имя, по которому будут приходить запросы. Если домена нет, можно указать IP-адрес сервера. Внутри location / мы устанавливаем proxy_pass на адрес бэкенда, а директива include proxy_params подтягивает стандартный набор заголовков, необходимых для корректной работы многих приложений (например, Host, X-Real-IP, X-Forwarded-For).

Если вы используете CentOS, создайте файл /etc/nginx/conf.d/my-app.conf с тем же содержимым, но заменяя include proxy_params на отдельные строки (или просто не включайте их в базовой настройке). Для полноты вот конфигурация без proxy_params:

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;
}
}

После создания файла включите его симлинкой в sites-enabled (Debian/Ubuntu):

sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/

Проверка конфигурации и перезапуск Nginx

Прежде чем перезапускать Nginx, обязательно проверьте синтаксис конфигурации:

sudo nginx -t

Если вы увидите syntax is ok и test is successful, можно безопасно перезагрузить сервер:

sudo systemctl reload nginx

Или перезапустить полностью:

sudo systemctl restart nginx

Теперь откройте браузер и перейдите на ваш домен или IP. Вы должны увидеть ответ вашего приложения. Если ничего не работает, смотрите логи Nginx:

sudo tail -f /var/log/nginx/error.log

Чаще всего проблема в том, что порт бэкенда не совпадает, либо приложение слушает только на 127.0.0.1, а в proxy_pass указан правильный адрес. Убедитесь также, что брандмауэр (ufw, firewalld) не блокирует нужные порты.

При настройке дополнительных локаций, например для API или статики, вы можете добавить ещё правил. Хорошей практикой является использование разных location блоков, например:

location /api/ {
proxy_pass http://127.0.0.1:3000/api/;
}
location /static/ {
alias /var/www/my-app/static/;
}

Это позволяет Nginx отдавать статику напрямую, разгружая ваше приложение.

Диагностика типовых неполадок

Если после настройки вы получаете ошибку 502 Bad Gateway, это означает, что Nginx не может соединиться с бэкендом. Проверьте:

  1. Запущено ли ваше приложение. Выполните ps aux | grep node или systemctl status my-app.
  2. Постучитесь вручную: curl -I http://127.0.0.1:3000.
  3. Посмотрите, нет ли ошибок в конфигурации: sudo nginx -t.

Ошибка 504 Gateway Timeout появляется, когда бэкенд отвечает слишком долго. Увеличьте таймауты в конфигурации:

proxy_connect_timeout 60s;
proxy_read_timeout 120s;

Если вы планируете использовать HTTPS, обязательно настройте SSL-сертификат, например через Let's Encrypt (certbot). Для этого потребуется включить 443 порт и обновить конфигурацию, но это тема для отдельной инструкции.

Заключение

Мы рассмотрели базовую настройку реверс-прокси на Nginx: подготовку VPS, установку, создание конфигурации, проверку и перезапуск. Этого достаточно, чтобы запустить простое приложение за Nginx на вашем виртуальном сервере. Дальнейшее углубление — настройка SSL, балансировка нагрузки, кэширование и оптимизация — остаётся на ваше усмотрение. Действуйте по шагам, и вы избежите большинства ошибок, с которыми сталкиваются новички.

Мини-чеклист

  • Обновите систему и установите Nginx
  • Убедитесь, что бэкенд-приложение запущено и слушает нужный порт
  • Создайте конфигурационный файл виртуального хоста
  • Укажите server_name и proxy_pass
  • Проверьте конфигурацию с помощью nginx -t
  • Перезапустите Nginx и протестируйте доступность из браузера
  • Просмотрите логи Nginx при возникновении проблем

Частые ошибки

  • Не проверили nginx -t перед перезапуском — из-за синтаксической ошибки падает весь сервер
  • Неправильно указали proxy_pass: если у бэкенда есть URI, а в proxy_pass его нет, запросы будут искажаться (нужно следить за слэшами)
  • Забыли добавить proxy_set_header для корректной передачи IP и схемы
  • Приложение слушает на 127.0.0.1, а конфигурация указывает на localhost или другой интерфейс
  • Файл не включен в sites-enabled, поэтому Nginx его не читает
  • На CentOS/RedHat файл должен быть в conf.d, а не в sites-available

Источники и документация

FAQ

Можно ли использовать реверс-прокси Nginx без доменного имени?

Да, вместо server_name можно указать IP-адрес VPS или просто пропустить директиву (будет матчиться любой Host). Но лучше задать domain или IP для предсказуемого поведения.

Что означает ошибка 502 Bad Gateway при обращении к сайту?

Это значит, что Nginx не смог подключиться к бэкенд-серверу. Проверьте, запущено ли ваше приложение, соответствует ли порт в proxy_pass фактическому порту приложения, и убедитесь, что бэкенд доступен с сервера по curl.

Нужно ли открывать порт 3000 (порт приложения) в брандмауэре?

Нет, обычно достаточно открыть только 80 (и 443 для TLS). Приложение должно слушать только localhost, чтобы внешние злоумышленники не могли обратиться к нему напрямую. Nginx будет перенаправлять запросы на него.

Хотите перейти сразу к рабочему доступу?

Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.

Получить доступ

Дальше по теме

Связанные статьи