Введение
Обратный прокси-сервер позволяет скрыть backend-сервера от внешнего мира, балансировать нагрузку и добавлять дополнительные функции, такие как шифрование SSL. Nginx — популярный выбор благодаря скорости и простоте конфигурации. После выполнения этого руководства вы сможете настроить Nginx для перенаправления внешних запросов к локальным или удалённым серверам, обеспечивая чистый и защищённый фронтенд.
💡 Совет: Храните конфигурационные файлы в
/etc/nginx/, используйте контроль версий для служебных файлов и всегда тестируйте изменения перед перезапуском.
Требования
- Установленный Nginx версии 1.24 или выше (
nginx -v). - Доступ к системе с правами root (или пользователя с sudo).
- Backend-сервер, работающий на
HTTP(http://backend_ip:backend_port) илиHTTPS. - Операционная система: Ubuntu 22.04 LTS, Debian 12 или любая Linux-дистрибутивная система.
Пошаговая инструкция
Шаг 1: Установка и проверка Nginx
# Для Ubuntu/Debian
apt update
apt install -y nginx
# Проверка версии
nginx -v
⚠️ Важно: Убедитесь, что порт 80 не занят другим веб-сервером (например, Apache).
Шаг 2: Создание конфигурации reverse proxy
Откройте основной конфигурационный файл (/etc/nginx/sites-available/default). Для этого можно использовать nano или любой другой текстовый редактор:
nano /etc/nginx/sites-available/default
Добавьте следующий блок внутри файла (или замените существующий блок server):
server {
listen 80;
server_name proxy.example.com; # Замените на ваш домен или IP
location / {
# Основная директива перенаправления
proxy_pass http://backend.example.com:8080;
# Передача заголовков клиета
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;
}
}
Замените proxy.example.com, backend.example.com и порт 8080 на фактические значения вашего backend-сервера.
Сохраните файл (Ctrl+O, затем Enter), выйдите (Ctrl+X).
Шаг 3: Тестирование конфигурации
Перед перезапуском выполните проверку синтаксиса:
nginx -t
Если ошибок нет, перезапустите Nginx:
systemctl restart nginx
Шаг 4: Проверка работы reverse proxy
С удалённого компьютера (или другой терминал с доступом в интернет) выполните:
curl -I http://proxy.example.com/
Вы должны увидеть ответ от backend-сервера (например, HTTP/1.1 200). Если вы видите страницу, обслуживаемую Nginx, reverse proxy работает.
Шаг 5: Дополнительные настройки и защита
Шифрование SSL/TLS (если вы хотите HTTPS):
server {
listen 443 ssl;
server_name proxy.example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/private.key;
location / {
proxy_pass https://backend.example.com:8443;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Ограничение по IP (добавьте перед location):
allow 192.168.1.100; # Разрешённый IP
deny all; # Запретить остальных
⚠️ Важно: После изменения конфигурации всегда запускайте
nginx -tперед перезапуском.
Проверка результата
- Функциональность: Убедитесь, что все запросы (
GET,POSTи т.д.) корректно перенаправляются. - Заголовки: Проверьте, что заголовки (
Host,X-Real-IP), добавленные в конфигурации, присутствуют в запросах backend-сервера. - Логи: Просмотрите
nginx_access.logиerror.logдля выявления ошибок.
Возможные проблемы
| Симптом | Вероятная причина | Решение |
|---|---|---|
502 Bad Gateway | Неправильный proxy_pass (неверный хост/порт) | Проверьте DNS, доступность backend-сервера и корректность порта |
SSL handshake failed | Сертификат не загружен или устарел | Укажите правильный путь к .pem файлам и убедитесь, что они не истекли |
404 Not Found в backend | Неверный URI или отсутствует базовый путь | Добавьте proxy_pass http://backend.example.com:8080; с нужным путём или используйте rewrite |
| Nginx не запускается после изменений | Синтаксическая ошибка в конфигурации | Запустите nginx -t, исправьте ошибки, затем перезапустите |
Если проблема сохраняется, проверьте systemctl status nginx и содержимое error.log (/var/log/nginx/error.log).