передача реального IP-адреса из одного экземпляра nginx в другой и запись его в логи

передача реального IP-адреса из одного экземпляра nginx в другой и запись его в логи

Перенося запрос на мой внутренний сервер 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-адрес.

Связанный контент