EUR
european

EUR

usa

USD

Russian Ru
Ex. VAT Ex. VAT 0%

Настройка Nginx в качестве reverse proxy для backend-приложений

Введение

В современных серверных конфигурациях приложения редко взаимодействуют с интернетом напрямую. Вместо этого перед ними располагается reverse proxy, который обрабатывает входящие клиентские запросы. Nginx — один из самых популярных инструментов для этой задачи, поскольку он быстрый, надёжный и простой в настройке. В этом руководстве вы узнаете, как настроить Nginx в качестве reverse proxy для backend-приложения, работающего на том же сервере.

Что такое reverse proxy?

Reverse proxy — это сервер, который:

  • Принимает запросы от клиентов (браузеров, API и т.д.)
  • Перенаправляет эти запросы backend-приложению
  • Возвращает клиенту ответ от backend

Клиент никогда не взаимодействует напрямую с backend-приложением.

Reverse proxy vs прямой доступ

Без reverse proxy:

Client ---> Backend application (port 3000)

С reverse proxy:

Client ---> Nginx (port 80, 443) ---> Backend application (port 3000)

Зачем использовать Nginx как reverse proxy?

Использование Nginx перед приложением позволяет:

  • Открывать в интернет только порты 80/443
  • Скрывать backend-сервисы от прямого доступа
  • Терминировать HTTPS (TLS) в одном месте
  • Добавлять логирование, контроль доступа и ограничение скорости
  • Запускать несколько приложений на одном сервере

Для системных администраторов это означает высокий уровень безопасности и простое управление.

Сценарий, используемый в этом руководстве

Для простоты используем следующую схему:

  • Nginx слушает порт 80
  • Backend-приложение слушает 127.0.0.1:3000
  • Запросы к http://example.com перенаправляются на backend

Схема движения трафика

[ Browser ] | v [ Nginx example.com:80,443 ] | v [ Backend app 127.0.0.1:3000 ]

Предварительные требования

Перед началом убедитесь, что у вас есть:

  • Linux-сервер с последней стабильной версией Debian
  • Доступ root или sudo
  • Уже запущенное backend-приложение (например, Node.js, Python или Java)
  • Базовое понимание работы в терминале Linux

Установка Nginx

Обновите список пакетов и установите Nginx и curl (для тестирования):

sudo apt update

sudo apt install nginx curl

Проверьте, что Nginx запущен:

systemctl status nginx

В выводе должно присутствовать "active (running)".

Протестируйте Nginx локально:

curl http://localhost

Если Nginx работает, вы получите стандартную страницу приветствия.

Структура конфигурации Nginx

Файлы конфигурации Nginx обычно находятся в /etc/nginx/. Важные директории:

  • /etc/nginx/nginx.conf — основной конфигурационный файл
  • /etc/nginx/sites-available/ — конфигурации сайтов (неактивные)
  • /etc/nginx/sites-enabled/ — активные конфигурации (символические ссылки)

Nginx читает конфигурации из каталога sites-enabled, а не напрямую из sites-available. Рекомендуется создавать файлы конфигурации в sites-available и затем создавать символические ссылки в sites-enabled.

Создание конфигурации reverse proxy

Создание нового файла сайта

sudo nano /etc/nginx/sites-available/reverse-proxy.conf

Добавьте конфигурацию reverse proxy

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

Разбор конфигурации

Блок server

server { listen 80; server_name example.com; }

  • listen 80; — Nginx слушает HTTP-трафик на порту 80
  • server_name example.com; — доменное имя, для которого применяется этот блок

Блок location

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

  • location / — соответствует всем входящим URL
  • proxy_pass — перенаправляет запросы backend-приложению

Proxy-заголовки

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;

Эти заголовки позволяют backend-приложению знать:

  • Оригинальное доменное имя
  • Реальный IP-адрес клиента
  • Был ли запрос HTTP или HTTPS

Без этих заголовков backend может логировать некорректную информацию о клиентах.

Активация конфигурации

Отключите стандартный сайт Nginx, чтобы избежать конфликтов на порту 80:

sudo rm /etc/nginx/sites-enabled/default

Создайте символическую ссылку для активации сайта:

sudo ln -s /etc/nginx/sites-available/reverse-proxy.conf /etc/nginx/sites-enabled/

Проверьте конфигурацию на ошибки синтаксиса:

sudo nginx -t

Если всё успешно, перезагрузите Nginx:

sudo systemctl reload nginx

Тестирование reverse proxy

Проверьте с сервера:

curl http://example.com

Откройте http://example.com в браузере. Вы должны получить ответ от backend-приложения, а не стандартную страницу Nginx. Если всё настроено правильно, загрузится ваше приложение.

Как обрабатывается запрос

  1. Клиент отправляет запрос к example.com
  2. Nginx принимает запрос на порту 80
  3. Nginx пересылает запрос на 127.0.0.1:3000
  4. Backend обрабатывает запрос
  5. Ответ возвращается через Nginx
  6. Клиент получает ответ

Частые ошибки и устранение неисправностей

Backend не запущен

  • Убедитесь, что приложение работает
  • Проверьте правильность порта

ss -tuln | grep 3000

Неверный адрес proxy_pass

  • Всегда указывайте http://
  • Проверьте IP-адрес и порт

Забыли перезагрузить Nginx

После каждого изменения конфигурации:

sudo systemctl reload nginx

Фаервол блокирует доступ

Убедитесь, что порт 80 открыт:

sudo ufw allow 80

Дополнительные улучшения

После настройки reverse proxy можно:

  • Включить HTTPS с помощью Let's Encrypt
  • Запустить несколько backend-приложений
  • Добавить access-логи и error-логи
  • Настроить балансировку нагрузки
  • Поддержать WebSocket-соединения

Настройка HTTPS

В production-среде всегда следует использовать HTTPS вместо HTTP. HTTPS шифрует трафик между клиентом и сервером, защищая пароли, API-токены, cookie и другие чувствительные данные. Nginx поддерживает HTTPS с использованием SSL/TLS-сертификатов. В этом разделе вы узнаете:

  • Что такое Certbot
  • Как установить Certbot
  • Как Certbot автоматически изменяет конфигурацию Nginx
  • Как вручную настроить Nginx с использованием купленного сертификата

Что такое Certbot?

Certbot — это инструмент, который автоматически получает и устанавливает бесплатные SSL/TLS-сертификаты от Let's Encrypt. Он может:

  • Запросить бесплатный сертификат
  • Подтвердить владение доменом
  • Автоматически настроить Nginx
  • Настроить автоматическое продление сертификата

Для начинающих и большинства production-сред Certbot — самый простой и безопасный способ включить HTTPS.

Установка Certbot (Debian/Ubuntu)

Обновите список пакетов:

sudo apt update

Установите Certbot и плагин для Nginx:

sudo apt install certbot python3-certbot-nginx

Пакет python3-certbot-nginx позволяет Certbot автоматически изменять конфигурацию Nginx.

Получение и установка сертификата

Перед запуском Certbot убедитесь, что:

  • Домен указывает на публичный IP вашего сервера
  • Nginx запущен
  • Порты 80 и 443 открыты в фаерволе

Запустите:

sudo certbot --nginx

Certbot:

  1. Спросит, какой домен нужно защитить
  2. Подтвердит владение доменом
  3. Автоматически обновит конфигурацию Nginx
  4. Перезагрузит Nginx

Info

Certbot автоматически изменяет конфигурацию Nginx. Обычно он добавляет новый блок server для порта 443 (HTTPS), пути к SSL-сертификатам, настраивает редирект HTTP → HTTPS (если вы выбрали этот вариант) и добавляет рекомендуемые SSL-настройки.

Пример конфигурации, добавленной Certbot:

server { listen 443 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 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; } }

Certbot также может изменить HTTP-блок для редиректа:

server { listen 80; server_name example.com; return 301 https://$host$request_uri; }

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

  • Делать резервные копии конфигурации
  • Понимать, какие изменения были внесены
  • Всегда проверять конфигурацию после изменений

Проверка конфигурации:

sudo nginx -t

Автоматическое продление сертификата

Сертификаты Let's Encrypt действительны 90 дней. Certbot автоматически настраивает таймер продления. Проверить можно так:

sudo certbot renew --dry-run

При правильной настройке продление будет происходить автоматически без простоя.

Использование купленного SSL-сертификата

Если вы приобрели SSL-сертификат у центра сертификации (CA), настройку нужно выполнить вручную. После покупки вы обычно получаете:

  • Файл сертификата (например, example.com.crt)
  • Приватный ключ (example.com.key)
  • Файл цепочки сертификатов (ca_bundle.crt)

Создайте защищённый каталог:

sudo mkdir -p /etc/nginx/ssl

sudo chmod 700 /etc/nginx/ssl

Скопируйте файлы сертификата в этот каталог.

Пример HTTPS-конфигурации с купленным сертификатом:

server { listen 443 ssl; server_name example.com www.example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; ssl_trusted_certificate /etc/nginx/ssl/ca_bundle.crt; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; 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; } }

Добавьте редирект HTTP → HTTPS:

server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; }

Перезагрузите Nginx после ручной настройки:

sudo nginx -t

sudo systemctl reload nginx

Tip

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

Итоги

В этом руководстве вы узнали:

  • Что такое reverse proxy и зачем он нужен
  • Как Nginx перенаправляет запросы backend-приложениям
  • Как создать и активировать конфигурацию reverse proxy
  • Как тестировать и устранять распространённые ошибки
  • Как настроить HTTPS

Настройка Nginx в качестве reverse proxy — базовый и крайне важный навык для системных администраторов, широко используемый в production-средах.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA