Falcoさん、こんにちは。CloudflareのCF-Connecting-IPヘッダーから提供されるreal_ipは、nginxのログで取得できていますか?私の方では取得できておらず、cloudflaredのIPしか見えていません。
調査の結果、以下のいずれか、または両方の対応が必要だと思われます。
- nginxの設定に
cloudflaredのIPに対するset_real_ip_fromの行を追加する。もしこれが問題であれば、templates/cloudflare.template.ymlで提供されている他のset_real_ip_from行は、argotunnelユーザーには不要になると思われます。その場合、dockerリポジトリに、メインのapp.ymlから環境変数などであなたのcloudflaredIPを取得する別のargotunnelテンプレートを追加する必要があるかもしれません。 - ~~
log_formatを修正する。これはおそらく問題ではないと思いますが。~~確認済み、不要です。
編集:
動作させるために行っていることは以下の通りです。
Cloudflareテンプレートは使用しないでください。意味がありません。
代わりに、これをapp.ymlにマージしてください。
hooks:
after_web_config:
- file:
path: /etc/nginx/conf.d/cloudflare_tunnel_real_ip.conf
contents: |
# 元の訪問者のIPを復元 (ngx_http_realip_module)
set_real_ip_from 10.100.20.200/32; # あなたのcloudflared/argotunnel IP範囲
real_ip_header CF-Connecting-IP;
これは自動的にnginxのhttpコンテキストに配置されるので、適切です。
追伸:個人的には、クリーンにするために、Cloudflareテンプレートもsed -iを使用して/etc/nginx/conf.d/discourse.confに追加するのではなく、個別のファイルにnginx設定を生成するべきだと思います。