Включите X-Real-IP и X-Forwarded-For в Nginx

Включите X-Real-IP и X-Forwarded-For в Nginx

Как включить и 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

  1. Пытатьсякартапингуем их (не работает):

    map $remote_addr $real_header {
      default X-Real-IP;
      172.18.0.1 X-Forwarded-For;
    }
    
    server {
      real_ip_header $real_header;
    }
    
  2. Попробуйте разделить эти потоки на разные серверы. Согласно руководству 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";
    }
    
  3. Игра с местоположениями потребует гораздо больше синтаксического сахара для их разделения, и вам, вероятно, придется использовать if, но онизло. Но я думаю, что вполне возможно создать два внутренних расположения с ручной внутренней перезаписью между ними. Это будет полностью скрыто от пользователя.

  4. Полагаю, что работа с Lua также может помочь, но сначала попробуйте предыдущие предложения.

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