Apache HTTPD / التمثيل والوكالة والسعة / الدرس 9
مسار الوكالة العكسية وإعادة كتابة الرد
تتبع العنوانين وافصل الدور والاسم والتحويل والتطبيق.
في هذه الصفحة
أهداف الدرس
- شرح دور ProxyPass وProxyPassReverse.
- مراجعة البادئة وسلطة الخلفية وحد الرد دون اتصال.
تقدم الوكالة العكسية خلفية مضبوطة
تقبل طلب الواجهة وتمرر المحدد لخلفية، ويختلف forward الذي يختار وجهته العميل. قد يذهب /api/ إلى خلفية افتراضية ويبقى التوثيق محلياً. لا تلغي ProxyRequests Off ربط ProxyPass العكسي؛ تمنع تفعيل الدور الأمامي هنا. تلزم الوحدة ومزود البروتوكول. لا تبدأ الدورة وكيلاً أو خلفية أو مقبساً أو تتصل. يجب أن يحدد المالك دور الخدمة قبل ضبطها، لأن التمكين غير المقصود لوجهات يحددها العميل أوسع من نشر مسار تطبيق واحد إلى خلفية معروفة.
تهم البادئة والشرطة
يربط ProxyPass نطاقاً بعنوان، وتؤثر الشرطة والترتيب والاستثناءات في المسار. لا تفترض تماثل /api و/api/ في كل إعداد. الخلفية مدخل موثوق لا هدف عميل حر. حدد المخطط والاسم والمنفذ والمسار والوصول. قد تحمل القاعدة سلطة شبكة دون إعطاء المستخدم اعتماداً. لذلك ينبغي أن تراجع تغيير الخلفية كتغيير وجهة مفوضة، لا مجرد تحديث نص رابط، وأن تمنع بناء تلك الوجهة من حقل طلب غير موثوق دون عقد واضح.
اقرأ مثال وكالة محدوداً
يربط المقطع API ويضبط إعادة ترويسات التحويل، باسم غير عامل محجوز. ليس مضيفاً كاملاً ولا يحمل. يعدل Reverse ترويسات مدعومة مثل Location لا كل جسم أو JavaScript أو مسار cookie. راجع العناوين العامة والكوكيز مستقلة. قد ينجح الرد ويرسل المتصفح لعنوان داخلي أو خارجي خاطئ. لا يثبت اكتمال الثلاثة أسطر جاهزية الخدمة أو سياسة الهوية والاعتماد، بل يوضح حدود وظيفة كل توجيه حتى لا يُحمّل مسؤولية إصلاح محتوى التطبيق كله.
ProxyRequests Off
ProxyPass "/api/" "http://backend.example.invalid:9000/"
ProxyPassReverse "/api/" "http://backend.example.invalid:9000/"
الوحدات والواجهة والخلفية والسياسة والشبكة افتراضات غائبة. لا يحدث DNS أو اتصال أو HTTP أو تفويض وكالة.
الاسم والمخطط عقد تطبيق
قد يبني التطبيق روابط وتحويلات وكوكيز ووصولاً من Host ومعلومات المخطط. حدد ما يرسله الأمام الموثوق وما تتوقعه الخلفية؛ ليست PreserveHost علاجاً عاماً. لا تثق بمدخل عميل كهوية. TLS الخلفي والتحقق منه حد آخر. احفظ الرد والخطأ عند 502 و504 والتحويل والمحتوى المختلط بدلاً من زيادة كل مهلة. يجب أن يوضح التشخيص إن كان العميل يرى مخططاً عاماً مختلفاً عن الاتصال الداخلي، وأين يُوثق هذا الاختلاف دون فتح قبول ترويسات قابلة للتزوير.
حوّل مساراً معروفاً محلياً
يزيل البرنامج بادئة معلنة ويلحق الباقي بقاعدة، ولا يطابق Apache أو يطبع URL أو يحمي SSRF أو يطلب HTTP. يخلو المدخل من الترميز والغموض. يوضح /api/labels إلى /labels فقط. تحتاج الحقيقة الموقع والقاعدة والخلفية وعقد الترويسة من دليل مصرح. لا يصح تحويل هذه الدالة إلى بوابة تقبل أي عنوان عميل وتفترض أنه آمن، لأنها لم تصمم للتحقق من السلطة أو التطبيع أو إعادة التوجيه أو الوصول الفعلي لأي مورد شبكي.
frontend = "/api/labels"
prefix = "/api/"
backend = "http://backend.example.invalid:9000/"
assert frontend.startswith(prefix)
print(backend + frontend[len(prefix):])
print("text mapping only")
http://backend.example.invalid:9000/labels
text mapping only
لا يجلب URL أو يصل لشبكة أو قرص، ولا يستخدم لقبول خلفيات يرسلها عميل عشوائياً.
الأخطاء الشائعة وإصلاحها
يُفعل ProxyRequests On للعكسي فقط.
- لماذا يحدث؟
- اختلط الدوران.
- كيف تصلحه؟
- استخدم الربط المدعوم المقصود وراجع الوصول مستقلاً.
- كيف تتجنب تكراره؟
- صرح بالدور والوجهة المسموحة.
يُتوقع من Reverse تعديل كل الجسم.
- لماذا يحدث؟
- توسع ترويسات محددة لتحويل عام.
- كيف تصلحه؟
- راجع الروابط العامة والكوكيز والمحتوى مستقلة.
- كيف تتجنب تكراره؟
- اختبر التحويل والتنقل كنتيجتين.
يُفسر كل رد خلفي كمهلة قصيرة.
- لماذا يحدث؟
- اختلط الاتصال والبروتوكول والتوجيه والتطبيق.
- كيف تصلحه؟
- افحص دليل البوابة والحد المعني.
- كيف تتجنب تكراره؟
- غير افتراضاً مبرراً واحداً.
اختبر فهمك
1. لماذا يجتمع Off وProxyPass؟
اعرض الحل المشروح
لأنهما دوران مختلفان. يمنع المثال الدور الأمامي ويصف ربطاً عكسياً مضبوطاً، ولا يمثل سياسة كاملة أو وكالة عاملة.
2. أرجعت الخلفية رابط HTML داخلياً. هل يصلحه Reverse حتماً؟
اعرض الحل المشروح
لا. ليس تعديل ترويساته تعديل HTML عاماً. راجع عنوان التطبيق الخارجي أو استراتيجية محتوى مقصودة. لا تثبت حالة نجاح واحدة صحة التنقل.
أهم ما تعلمته
- افصل الربط والسلطة وسلوك الرد.
- لا يصلح التعديل المحدود كل رابط تطبيقي.