Назад | Перейти на главную страницу

Включите 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?

Если вы пытаетесь получить реальные IP-адреса из-за CloudFlare, вам следует вместо этого использовать их собственный заголовок CF-Connecting-IP. Вам следует игнорировать другие заголовки, если вы не создали их самостоятельно, поскольку они могут быть подделаны клиентом.

real_ip_header CF-Connecting-IP;
  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 также может помочь, но сначала попробуйте предыдущие предложения.