لم تعد عناوين IP الحقيقية معترفًا بها عبر الوكيل

خلال الأشهر القليلة الماضية (لا أتذكر بالضبط متى بدأ هذا)، لاحظت أن تكوين nginx الخارجي الخاص بي، كما هو موثق في Add an offline page to display when Discourse is rebuilding or starting up ، لتمرير عنوان IP الحقيقي، يتم تجاهله.

كان هذا التكوين الخارجي لـ nginx يعمل لسنوات:

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Real-IP $remote_addr;

الآن أرى أن كل حركة المرور تُنسب إلى شبكة docker الداخلية في نطاق RFC1918، على النحو التالي:

هذا بالطبع يكسر ميزة “تطبيق هذا العقاب على المستخدمين الآخرين الذين يتشاركون هذا عنوان IP” وجميع الاستخدامات الأخرى لعنوان IP البعيد الحقيقي.

أتوقع أن هذا الأمر قد تم معالجته في مكان ما وأنا فقط أبحث بشكل سيء. :frowning: لكنني سأقدّر أي إرشادات حول ما قد يكون قد تغير، لأتمكن من التكيف مع ذلك.

أتذكر شيئًا عن هذا مؤخرًا، لكنني لا أجد ذلك أيضًا. يتضمن Handling the "chain of trust" of the end user's real IP - #8 by supermathie رابطًا إلى قالب Cloudflare، والذي أعتقد أنه قد يكون نموذجًا جيدًا.

إليك ما أفعله ويبدو أنه لا يزال يعمل (اعتبارًا من “Discourse 2026.6.0-latest - GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub الإصدار 5c507d8359f4d6e8a5d98780c622d51cedbd9bd7”)

after_bundle_exec:
  - replace:
    filename: /etc/nginx/conf.d/discourse.conf
    from: "types {"
    to: |
      set_real_ip_from 192.168.1.0/24;
      set_real_ip_from 192.168.11.0/24;
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 10.0.0.0/8;
      real_ip_recursive on;
      real_ip_header X-Forwarded-For;
      types {

ربما يكون ذلك مرتبطًا بهذا التعديل: FIX: nginx sample configuration should be setting x-f-f to the end us… · discourse/discourse@b4a3389 · GitHub

قد يساعدك هذا:

كما هو الحال دائمًا، يساعدني نشر الموضوع ورؤية الردود في العثور على مواضيع مماثلة أخرى. :rofl: على سبيل المثال

شكرًا لكم جميعًا! سأقوم الآن بإعداد set_real_ip_from في حاوية nginx!

سأقوم بتغطية كامل نطاق RFC1918. ولإفادة الآخرين، سيكون ذلك كالتالي:

after_bundle_exec:
  - replace:
    filename: /etc/nginx/conf.d/discourse.conf
    from: "types {"
    to: |
      set_real_ip_from 192.168.0.0/16;
      set_real_ip_from 172.16.0.0/12;
      set_real_ip_from 10.0.0.0/8;
      real_ip_recursive on;
      real_ip_header X-Forwarded-For;
      types {

هذا لا يعمل بالنسبة لي.

أدرك الآن السبب وراء توقف عمله عندي في الالتزام المرجع؛ فقد كسر استبدال set_real_ip الذي كان لديّ لسنوات. المبرر لجعله أكثر متانة معقول، وهذه طريقة أفضل؛ تغيير واحد كاسر ثم يجب أن يكسر أقل في المستقبل.

لا أعرف لماذا لا يتم تطبيق استبدال after_bundle_exec، لكنني سأنتقل إلى إسقاط الملفات.

هذا يعمل بالنسبة لي؛ مشاركة للشخص التالي:

run:
  - file:
     path: /etc/nginx/conf.d/outlets/server/real-ip-recursive.conf
     chmod: 644
     contents: |
       real_ip_recursive on;
  - file:
     path: /etc/nginx/conf.d/outlets/server/real-ip-header.conf
     chmod: 644
     contents: |
       real_ip_header X-Forwarded-For;
  - file:
     path: /etc/nginx/conf.d/outlets/server/set-real-ip-from.conf
     chmod: 644
     contents: |
       set_real_ip_from 192.168.0.0/16;
       set_real_ip_from 172.16.0.0/12;
       set_real_ip_from 10.0.0.0/8;