Перенося запрос на мой внутренний сервер nginx, я добавляю к вызову:
proxy_set_header X-Real-IP $remote_addr;
когда я пытаюсь вывести это значение в журнал внутреннего nginx, контейнер падает:
log_format verbose ' Real: $X-Real-IP ';
Что я делаю не так? (Я также пробовал использовать "" вокруг переменной, это не помогло.)
решение1
Сервер получает X-Real-IP
как один из заголовков в HTTP-запросе. Nginx делает каждое из значений заголовка запроса доступным как переменная.
Имя переменной для значений заголовка http-запроса начинается с $http_
. Имя заголовка преобразуется в нижний регистр, а каждый дефис заменяется подчеркиванием.
Например, X-Real-IP
доступен как$http_x_real_ip
Видетьэтот документдля получения подробной информации.
решение2
Можно ngx_http_realip_module
заставить nginx использовать IP-адрес в заголовках в качестве исходного IP-адреса везде внутри nginx.
Он настроен следующим образом:
set_real_ip_from 192.168.1.1 # IP address of the external nginx
real_ip_header X-Real-IP;
При использовании этого модуля нет необходимости определять собственные форматы журналов, nginx выводит реальный IP-адрес клиента в файлах журналов и во всех других местах как исходный IP-адрес.