web-dev-qa-db-ja.com

NginxでX-Real-IPとX-Forwarded-Forの両方を有効にする

NginxでX-Real-IPとX-Forwarded-Forの両方を有効にするにはどうすればよいですか?私は現在、Dockerネットワークで実際のIPを取得するために以下を持っています。

set_real_ip_from  172.18.0.0/32;
real_ip_header    X-Real-IP;
real_ip_recursive on;

CloudflareからDockerコンテナーにも実際のIPを渡したいと思います。 X-Real-IPとX-Forwarded-Forの両方を同じ構成で使用するには、X-Real-IP用に1セットのIPとX-Forwarded-For用に1セットのIPを使用するにはどうすればよいですか?

2
j7an

CloudFlareの背後から実際のIPを取得しようとしている場合は、代わりに独自のヘッダーCF-Connecting-IPを使用する必要があります。他のヘッダーは、クライアントが偽造している可能性があるため、自分で生成していない場合は無視してください。

real_ip_header CF-Connecting-IP;
1
Michael Hampton
  1. 試してみてください map pingを実行してください(機能しません):

    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を使用する必要がありますが、それらは evil です。しかし、2つの内部ロケーションを作成し、それらの間で手動で内部書き換えを行うことはかなり可能だと思います。これはユーザーから完全に隠されます。

  4. Luaで遊ぶことも役立つと思いますが、最初に以前の提案を試してください。

0
kworr