أفهم، إذن الأمر يتعلق أكثر بما تفعله Rails أو الجواهر (gems) الأخرى مع الرؤوس، وأقل بكثير عما تفعله أكواد Discourse.
من المثير للاهتمام أن Rails لا تستخدم X-Real-IP، والتي ربما تكون أقل استخدامًا من X-Forwarded-For، لكنها بالتأكيد أكثر شهرة من Forwarded وClient-IP
.
ربما تكون X-Real-IP عفا عليها الزمن في إعدادات Nginx. Discourse تستخدمها جنبًا إلى جنب مع X-Forwarded-For في السجلات، إذا كنت أفسر ذلك بشكل صحيح؟ لم أتمكن من العثور على أي استخدام أو ذكر صريح آخر في الكود:
- discourse/lib/discourse_logstash_logger.rb at main · discourse/discourse · GitHub
- logster/lib/logster/message.rb at main · discourse/logster · GitHub
ما يلي بدا لي خاطئًا بطريقتين عندما رأيته أثناء تصحيح أخطاء تحديد المعدل المشترك (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
.