مرحباً بالجميع،
لقد اكتشفت للتو، بالطريقة الطويلة والصعبة، إعداد Cloudflare real_ip_header CF-Connecting-IP; في nginx…
لدي إعداد معقد إلى حد ما حيث يوجد مدير وكيل nginx في صورة docker خاصة به (أستخدم SWAG من linuxserver.io، وهو رائع بالمناسبة)، لذا يبدو مسار الاتصال كالتالي:
المستخدم -> Cloudflare -> الخادم (حاوية docker الأولى: Nginx -> حاوية docker الثانية: Discourse)
لدي كلتا حاويتي docker في نفس شبكة docker، لذا فهما تتواصلان؛ وهذا جيد.
كانت لدي مشكلة حقيقية في محاولة الحصول على عنوان IP الأصلي للمستخدم في سجلات Discourse. قرأت جميع المواضيع الرائعة هنا وأضفت قالب cloudflare إلى ملف app.yml الخاص بي، لكنه لم ينجح…
بعد أن فقدت شعري، أدركت أن المشكلة لم تكن قالب Cloudflare بحد ذاته، بل حقيقة أن حاوية Discourse كانت تحصل على عنوان IP من حاوية NGINX وكان عليّ إضافة نطاق CIDR لعنوان IP الخاص بشبكة docker إلى set_real_ip_from كما يلي:
set_real_ip_from 172.18.0.0/16;
لمساعدة المضيفين المستقبليين، هل من الممكن إضافة هذا السطر إلى قالب cloudflare؟ النطاق IP 172.18.0.0/16 هو نطاق خاص على أي حال، لذلك حتى لو لم يكن لديك NPM في حاوية docker، فلن يضر إضافة هذا النطاق.
اقتراحي هو تغيير هذا السطر في 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
ما رأيك؟