У меня есть сервер nginx за балансировщиком нагрузки, сервер nginx передает запросы различным службам, но в этом случае контейнер докеров работает с apache. Балансировщик нагрузки правильно устанавливает X-Forwarded-For, но к тому времени, когда он попадает в контейнер докера, X-Forwarded-For был установлен на IP-адрес LB.
У меня есть это в конфигурации nginx:
/etc/nginx/conf.d/real_ip.conf
set_real_ip_from {{LB IP}};
real_ip_header X-Настоящий-IP;
real_ip_recursive на;
а это виртуальный хост:
сервер {
слушать 443 ssl;
слушать [::]:443 ssl;
имя_сервера *.домен домен;
включить /etc/nginx/snippets/domain_ssl.conf;
add_header X-Nginx-Debug «привет»;
proxy_pass_request_headers включен;
место расположения / {
proxy_pass_request_headers включен;
proxy_pass http://container-php;
прокси_http_версия 1.1;
proxy_set_header Обновить $http_upgrade;
proxy_set_header Соединение "обновление";
proxy_set_header Хост $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Remote-Addr $remote_addr;
proxy_set_header X-Real-IP $http_x_real_ip;
proxy_set_header X-Header-Test "Hello World - $http_x_forwarded_for";
proxy_set_header X-Forwarded-Proto $ схема;
}
}
Но что я получаю из контейнера:
массив (19) {
["Соединение"]=>
строка(7) "обновить"
["Хост"]=>
строка(19) "домен"
["X-Перенаправлено-Для"]=>
строка (12) "{{LB IP}}"
["Тест X-заголовка"]=>
строка (13) "Привет, мир -"
["X-Forwarded-Proto"]=>
строка(5) "https"
["управление кешем"]=>
строка (9) "максимальный возраст = 0"
["сек-ч-уа"]=>
string(64) "" Не бренд";v="99", "Google Chrome";v="97", "Chromium";v="97""
["sec-ch-ua-mobile"]=>
строка(2) "?0"
["sec-ch-ua-platform"]=>
строка(9) ""Windows""
["обновление-небезопасные-запросы"]=>
строка(1) "1"
["агент пользователя"]=>
string(114) "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, например Gecko) Chrome/97.0.4692.71 Safari/537.36"
["принять"]=>
строка(135) "текст/html,приложение/xhtml+xml,приложение/xml;q=0.9,изображение/avif,изображение/webp,изображение/apng,*/*;q=0.8,приложение/signed-exchange;v =b3;q=0,9"
["sec-fetch-site"]=>
строка(4) "нет"
["sec-fetch-mode"]=>
строка(8) "навигация"
["sec-fetch-user"]=>
строка(2) "?1"
["sec-fetch-dest"]=>
строка(8) "документ"
["принять кодировку"]=>
string(17) "gzip, deflate, br"
["принять-язык"]=>
string(26) "en-GB,en-US;q=0.9,en;q=0.8"
}
В частности, X-Real-IP, X-Fowarded-For, похоже, не установлены, равно как и remote_addr. Файлы, обслуживаемые непосредственно из nginx, имеют правильную настройку x-forwarded-for, поэтому LB отправляет правильный заголовок.
Я пропустил шаг?