vji:nginx1:start
Это старая версия документа!
2.6 Создайте конфиги nginx
Файл nginx/nginx1.conf:
nano nginx/nginx1.conf
Содержимое:
# ============================================================
# Конфигурация NGINX сервера #1
# Роль: Публичная точка входа, может маршрутизировать на другие прокси
# ============================================================
server {
# Слушаем порт 80 внутри контейнера
listen 80;
# Имя сервера (используется для виртуальных хостов)
server_name nginx1;
# ============================================================
# Основной location - прямая проксирация на приложение
# ============================================================
location / {
# Адрес бэкенда - приложение в контейнере app на порту 8000
proxy_pass http://app:8000;
# КРИТИЧЕСКИ ВАЖНО: перезаписываем заголовок X-Forwarded-For
# $proxy_add_x_forwarded_for - специальная переменная NGINX:
# - Берёт существующий заголовок X-Forwarded-For (если есть)
# - Добавляет через запятую IP адрес клиента ($remote_addr)
# - ВАЖНО: Если клиент подделал заголовок, NGINX его игнорирует
# и использует только реальный IP подключения
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Передаём оригинальный Host для корректной работы приложения
proxy_set_header Host $host;
# Дополнительный заголовок с реальным IP (альтернативный метод)
proxy_set_header X-Real-IP $remote_addr;
}
# ============================================================
# Маршрут через NGINX 2
# Демонстрирует цепочку: пользователь -> nginx1 -> nginx2 -> app
# ============================================================
location /via2 {
# Проксируем на nginx2 (корневой путь)
proxy_pass http://nginx2/;
# Важно: также перезаписываем X-Forwarded-For и для этого запроса
# Теперь $remote_addr будет IP адресом nginx1 (или клиента, если прямой запрос)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
# ============================================================
# Маршрут через NGINX 3
# Цепочка: пользователь -> nginx1 -> nginx3 -> app
# ============================================================
location /via3 {
proxy_pass http://nginx3/;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
# ============================================================
# Маршрут через NGINX 2 и затем NGINX 3
# Полная цепочка из трёх прокси:
# пользователь -> nginx1 -> nginx2 -> nginx3 -> app
# ============================================================
location /via2-3 {
# Проксируем на специальный location в nginx2
# nginx2/via3 в свою очередь проксирует на nginx3
proxy_pass http://nginx2/via3;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
Файл nginx/nginx2.conf:
nano nginx/nginx2.conf
Содержимое:
# ============================================================================
# КОНФИГУРАЦИЯ NGINX #2 - ПРОМЕЖУТОЧНЫЙ ПРОКСИ
# ============================================================================
# Роль: Добавляет свой IP в цепочку и передаёт запрос дальше
# ============================================================================
server {
listen 80;
server_name nginx2;
# ------------------------------------------------------------------------
# ОСНОВНОЙ LOCATION - ПРОКСИРАЦИЯ НА ПРИЛОЖЕНИЕ
# ------------------------------------------------------------------------
location / {
proxy_pass http://app:8000;
# ====================================================================
# ФОРМИРУЕМ ЦЕПОЧКУ X-Forwarded-For
# ====================================================================
# $http_x_forwarded_for - входящий заголовок (уже есть IP клиента)
# $remote_addr - IP адрес, с которого пришёл запрос (предыдущий прокси)
# Результат: "IP_клиента, IP_предыдущего_прокси"
# ====================================================================
proxy_set_header X-Forwarded-For "$http_x_forwarded_for, $remote_addr";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
# ------------------------------------------------------------------------
# МАРШРУТ НА NGINX 3 (ДЛЯ СОЗДАНИЯ БОЛЕЕ ДЛИННЫХ ЦЕПОЧЕК)
# ------------------------------------------------------------------------
location /via3/ {
proxy_pass http://nginx3/;
# Передаём накопленную цепочку дальше
# $http_x_forwarded_for уже содержит IP клиента и nginx1
# Добавляем свой IP ($remote_addr)
proxy_set_header X-Forwarded-For "$http_x_forwarded_for, $remote_addr";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Файл nginx/nginx3.conf:
nano nginx/nginx3.conf
Содержимое:
# ============================================================================
# КОНФИГУРАЦИЯ NGINX #3 - ПОСЛЕДНИЙ ПРОКСИ
# ============================================================================
# Роль: Конечный прокси, формирует финальный заголовок для приложения
# ============================================================================
server {
listen 80;
server_name nginx3;
# ------------------------------------------------------------------------
# ЕДИНСТВЕННЫЙ LOCATION - ВСЕ ЗАПРОСЫ НА ПРИЛОЖЕНИЕ
# ------------------------------------------------------------------------
location / {
proxy_pass http://app:8000;
# ====================================================================
# ФОРМИРУЕМ ФИНАЛЬНУЮ ЦЕПОЧКУ
# ====================================================================
# $http_x_forwarded_for - цепочка от предыдущих прокси
# $remote_addr - IP предыдущего прокси в цепочке
# Приложение получит полный список всех IP
# ====================================================================
proxy_set_header X-Forwarded-For "$http_x_forwarded_for, $remote_addr";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
# Дополнительные заголовки для приложения
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
}
}
vji/nginx1/start.1779879025.txt.gz · Последнее изменение: 2026/05/27 10:50 — vji
