Cloudflareテンプレートの提案:ユーザーから実際のIPを取得する

皆さん、こんにちは。

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

どう思いますか?

リバースプロキシの使用に関するトピックはたくさんありますが、その方法については触れられていません。Cloudflare を使用している人がすべてリバースプロキシを使用しているわけではありません。

ただし、スクリプトなしで設定するたびに検索する必要があるため、リバースプロキシのテンプレートがあると便利です。

その通りです。逆もまた真なり、リバースプロキシを使用している人が皆 Cloudflare を使用しているわけではありません :wink:

この提案は、Cloudflare を使用している人々の生活を楽にするためのものです。Docker でリバースプロキシを使用していない人には何も変わりませんが、単純な問題の解決策を探すのに何時間も節約できる可能性があります。

「いいね!」 1

Cloudflare を使用している人々は、おそらく大変な生活を送っているでしょう。ここでは、その多くの例を見つけることができます。テンプレートのインストールは、発生する可能性のある問題のごく一部であり、最も簡単に修正できるものです。(私は、安価ですが無料ではなく、設定も簡単な bunny.net のような実際の CDN を使用することをお勧めしますが、それはあなたが尋ねたことではありません。)

もちろん、あなたの問題は Cloudflare とは全く関係なく、リバースプロキシに関するものでした。そのため、Cloudflare を検索しても、おそらく何の役にも立たなかったでしょう!

それでも、リバースプロキシ(そして私が本当に欲しい、アセットを事前コンパイルして S3 にプッシュするテンプレート)のような、さらにいくつかの標準テンプレートを追加することは良い考えです。

幸運を祈ります。

「いいね!」 1