يا @Falco، هل يأتي عنوان IP الحقيقي (الذي توفره CF كرأس CF-Connecting-IP) إليك في سجلات nginx؟ لا يأتي إليّ. أرى فقط عنوان IP الخاص بـ cloudflared.
أعتقد أنه يجب القيام بأحد هذين الأمرين أو كليهما (سأتابع بعد التحقيق):
- إضافة سطر تكوين
set_real_ip_fromإلى nginx لعنوان IP الخاص بـcloudflared. إذا تبين أن هذه هي المشكلة، فأنا أخمن أنه لا يلزم وجود أي من أسطرset_real_ip_fromالأخرى (الموفرة بواسطةtemplates/cloudflare.template.yml) لمستخدمي argotunnel. وفي هذه الحالة، ربما يجب إضافة قالب argotunnel منفصل إلى مستودع docker الذي يسحب عنوان IP الخاص بـcloudflaredالخاص بك من متغير بيئة أو شيء ما فيapp.ymlالرئيسي الخاص بك. إصلاحتم التأكد من عدم الحاجة إليها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; # نطاق عنوان IP الخاص بـ cloudflared/argotunnel الخاص بك
real_ip_header CF-Connecting-IP;
هذا ينتهي تلقائيًا في سياق http الخاص بـ nginx، وهو مناسب بالمناسبة.
ملاحظة: في رأيي، من أجل النظافة، يجب أن يقوم قالب cloudflare أيضًا بإنشاء تكوين nginx الخاص به في ملف منفصل بدلاً من استخدام sed -i لإضافته إلى /etc/nginx/conf.d/discourse.conf.