Инструменты пользователя

Инструменты сайта


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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki