ありがとうございます!
cloudflare.template.yml を有効にしました。
しかし、私の理解が正しければ、これは Cloudflare の IP アドレスからのトラフィックに対するレート制限を無効にするためだけのものでした。
現時点での私の Prometheus 設定は以下の通りです。
scrape_configs:
- job_name: forum
scrape_interval: 5s
scheme: https
static_configs:
- targets:
- forum-behind-cloudflare-dns-proxy.com
さて、私が直面している問題は、Discourse がリクエストの実際の IP アドレスを認識できないことです。そのため、許可リスト方式を機能させるために、以下の試みを行いました。
app.yml内の環境変数DISCOURSE_PROMETHEUS_TRUSTED_IP_WHITELIST_REGEXに、Prometheus サーバーの IPv6 アドレスを追加しました。- Prometheus サーバー上の
/etc/hostsに、フォーラムの実際の IPv6 アドレスをハードコードしました。これで、フォーラムは私の Prometheus サーバーの IP アドレスを認識し、アクセスを許可するようになりました。
しかし、他にもいくつかの問題があります。例えば、Prometheus をコンテナ内で実行しているため、ホストの /etc/hosts がコンテナ内部で共有されていません。その結果、フォーラムのアドレスが Cloudflare の IP に解決され続け、認証中にエラーが発生します。
Prometheus の起動時に -v /etc/hosts:/etc/hosts を指定してホストの /etc/hosts を Docker コンテナに共有することもできますが、その場合、以下のようなエラーが発生します。
Get "https://forum-behind-cloudflare-dns-proxy.com:443/metrics": dial tcp [<ipv6-address>]:443: connect: cannot assign requested address
今後は、この問題を解決する必要があります。
編集 #1: これも解決できました。Docker コンテナ内で IPv6 が無効化されていました。Docker コンテナで IPv6 を有効にするか、単に --net=host を指定することで修正できます。