
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 を使用するにはどうすればよいでしょうか。
答え1
CloudFlare の背後から実際の IP を取得しようとしている場合は、代わりに独自のヘッダー CF-Connecting-IP を使用する必要があります。自分で生成していない場合は、他のヘッダーはクライアントによって偽造される可能性があるため、無視する必要があります。
real_ip_header CF-Connecting-IP;
答え2
試す地図ping を実行します (動作しません):
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を使用する必要があるでしょうが、それらは悪しかし、2 つの内部場所を作成し、その間を手動で内部書き換えることは十分可能だと思います。これはユーザーからは完全に隠されます。
Lua で遊んでみるのも役に立つと思いますが、まずは以前の提案を試してください。