إدارة "سلسلة الثقة" لعنوان IP الحقيقي للمستخدم النهائي

أفهم، إذن الأمر يتعلق أكثر بما تفعله Rails أو الجواهر (gems) الأخرى مع الرؤوس، وأقل بكثير عما تفعله أكواد Discourse.

من المثير للاهتمام أن Rails لا تستخدم X-Real-IP، والتي ربما تكون أقل استخدامًا من X-Forwarded-For، لكنها بالتأكيد أكثر شهرة من Forwarded وClient-IP :thinking:.

ربما تكون X-Real-IP عفا عليها الزمن في إعدادات Nginx. Discourse تستخدمها جنبًا إلى جنب مع X-Forwarded-For في السجلات، إذا كنت أفسر ذلك بشكل صحيح؟ لم أتمكن من العثور على أي استخدام أو ذكر صريح آخر في الكود:

ما يلي بدا لي خاطئًا بطريقتين عندما رأيته أثناء تصحيح أخطاء تحديد المعدل المشترك (shared rate limiting) وتسجيل أخطاء حول عنوان IP غير صالح للعميل “unix:” بعد ترقيتنا لـ Discourse (نستخدم وكيل مسمار UNIX أمام الحاوية ونعتمد على X-Forwarded-For).

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;

لكنني أفهم أن “يعمل” لجعل $remote_addr هو نقطة الحقيقة الوحيدة بشكل موثوق، وreal_ip_header هو الطريقة القياسية للمديرين للتحكم في عنوان IP الوحيد الذي يحصل عليه Discourse/Rails. أرى أنه تمت إضافته بالفعل إلى Serve Discourse from a subfolder (path prefix) instead of a subdomain :+1:.