
Как включить и X-Real-IP, и X-Forwarded-For в Nginx? В настоящее время у меня есть следующее, чтобы получить реальные IP-адреса в сети Docker.
set_real_ip_from 172.18.0.0/32;
real_ip_header X-Real-IP;
real_ip_recursive on;
Я также хотел бы передавать реальные IP-адреса из Cloudflare в контейнеры Docker. Как использовать X-Real-IP и X-Forwarded-For в одной конфигурации, один набор IP-адресов для X-Real-IP и один набор IP-адресов для X-Forwarded-For?
решение1
Если вы пытаетесь получить реальные IP-адреса из-за CloudFlare, вам следует использовать их собственный заголовок CF-Connecting-IP. Вам следует игнорировать другие заголовки, если вы не сгенерировали их самостоятельно, так как они могут быть подделаны клиентом.
real_ip_header CF-Connecting-IP;
решение2
Пытатьсякартапингуем их (не работает):
map $remote_addr $real_header { default X-Real-IP; 172.18.0.1 X-Forwarded-For; } server { real_ip_header $real_header; }
Попробуйте разделить эти потоки на разные серверы. Согласно руководству real_ip_header можно задать для каждого сервера или местоположения, поэтому вы можете:
server { listen :8080; real_ip_header X-Real-IP; include "/all/other/stuff.conf"; } server { listen :8081; real_ip_header X-Forwarded-For; include "/all/other/stuff.conf"; }
Игра с местоположениями потребует гораздо больше синтаксического сахара для их разделения, и вам, вероятно, придется использовать if, но онизло. Но я думаю, что вполне возможно создать два внутренних расположения с ручной внутренней перезаписью между ними. Это будет полностью скрыто от пользователя.
Полагаю, что работа с Lua также может помочь, но сначала попробуйте предыдущие предложения.