皆さん、こんにちは。
Cloudflare の real_ip_header CF-Connecting-IP; 設定を nginx で使用する際に、長くて大変な思いをして発見したことがあります。
私のセットアップはかなり複雑で、nginx proxy manager が独自の Docker イメージに入っています(私は SWAG from linuxserver.io を使用しています。これは素晴らしいです)。そのため、接続パスは次のようになります。
ユーザー -> Cloudflare -> サーバー(最初の Docker コンテナ:Nginx -> 2番目の Docker コンテナ:Discourse)
両方の Docker コンテナは同じ Docker ネットワーク内にあり、通信できます。それは問題ありません。
Discourse のログでユーザーのオリジン IP を取得しようとすると、実際には問題が発生しました。ここのすべての良いスレッドを読み、Cloudflare テンプレートを app.yml ファイルに追加しましたが、それでも機能しませんでした…
髪の毛をむしり取った後、問題は Cloudflare テンプレート自体ではなく、Discourse コンテナが NGINX コンテナから IP アドレスを取得しており、docker network IP CIDR を set_real_ip_from に追加する必要があることに気づきました。次のようになります。
set_real_ip_from 172.18.0.0/16;
将来のホスティング担当者を支援するために、この行を Cloudflare テンプレートに追加することは可能でしょうか?IP 範囲 172.18.0.0/16 はいずれにしてもプライベートなので、Docker コンテナに NPM がなくても、この範囲を追加しても害はありません。
私の提案は、cloudflare.template.yml のこの行を変更することです。
sed -i \"/sendfile on;/a $CONTENTS\\nreal_ip_header CF-Connecting-IP;\" /etc/nginx/conf.d/discourse.conf
この行に:
sed -i \"/sendfile on;/a set_real_ip_from 172.18.0.0/16;\\n$CONTENTS\\nreal_ip_header CF-Connecting-IP;\" /etc/nginx/conf.d/discourse.conf
どう思いますか?