====== Реализация Trusted Proxy Chain для X-Forwarded-For в Nginx ======
**[[vji:trusted_proxy1:start| 1 Подготовка окружения]]**\\
**[[vji:trusted_proxy2:start| 2 Создание всех необходимых файлов]]**\\
**3 Проверка структуры файлов**
* Проверьте, что все файлы созданы
ls -la
* Должны увидеть:
-rw-r--r-- app.py
-rw-r--r-- docker-compose.yml
-rw-r--r-- Dockerfile
-rw-r--r-- requirements.txt
drwxr-xr-x nginx/
* Проверьте содержимое директории nginx
ls -la nginx/
* Должны увидеть:
-rw-r--r-- nginx1.conf
-rw-r--r-- nginx2.conf
-rw-r--r-- nginx3.conf
**4 Запуск стенда** \\
4.1 Сборка и запуск контейнеров \\
* Первый запуск (сборка образов)
docker-compose up -d --build
'' Что означает каждая опция:\\
up - запуск контейнеров\\
-d - detached mode (в фоновом режиме)\\
--build - пересобрать образы перед запуском ''
4.2 Проверка статуса контейнеров \\
Просмотр работающих контейнеров
docker-compose ps
''Должны увидеть 4 контейнера со статусом "Up"''
4.3 Проверка логов (если нужно отладить) \\
Логи всех контейнеров
docker-compose logs
Логи конкретного контейнера
docker-compose logs nginx1
docker-compose logs app
Логи в реальном времени
docker-compose logs -f
**5 Тестирование базовой функциональности**\\
5.1 Быстрая проверка (ручной тест)\\
Проверка, что приложение отвечает через nginx1\\
curl http://localhost:8081/
Ожидаемый ответ:\\
''{"message":"X-Forwarded-For header received","value":"172.x.x.x","client_ip":"172.x.x.x",...}''\\
5.2 Проверка всех цепочек\\
Проверка прямой маршрут\\
curl -s http://localhost:8081/ | jq '.value'
Проверка цепочки из двух прокси\\
curl -s http://localhost:8081/via2/ | jq '.value'
Проверка цепочки из трех прокси\\
curl -s http://localhost:8081/via2-3/ | jq '.value'
5.3 Проверка защиты от подделки\\
Попытка подменить IP\\
curl -s -H "X-Forwarded-For: 1.2.3.4" http://localhost:8081/ | jq '.value'
Должен вернуться реальный IP, а не 1.2.3.4