503 الخدمة غير متاحة - تعذّر إنشاء الاتصال النفقي للخادم الوكيل برقم 403

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

المشكلة

يحصل تطبيق العميل على رمز حالة HTTP 503 Service Unavailable مع رمز الخطأ protocol.http.ProxyTunnelCreationFailed كاستجابة لطلبات البيانات من واجهة برمجة التطبيقات.

رسالة الخطأ

يتلقى تطبيق العميل رمز الاستجابة التالي:

HTTP/1.1 503 Service Unavailable

بالإضافة إلى ذلك، قد تلاحظ رسالة الخطأ التالية:

{
   "fault":{
      "faultstring":"Proxy refused to create tunnel with response status 403",
      "detail":{
         "errorcode":"protocol.http.ProxyTunnelCreationFailed"
      }
   }
}

الخادم الوكيل لإعادة التوجيه والاتصال النفقي

يسمح Apigee Edge للخوادم الوكيلة لواجهة برمجة التطبيقات بالتواصل مع خادم الخلفية من خلال خادم وكيل كما هو موضّح في ضبط الخادم الوكيل لإعادة التوجيه. يفتح الخادم الوكيل اتصالاً آمنًا (HTTPS) أو غير آمن (HTTP) بخادم الخلفية استنادًا إلى نوع الخادم الوكيل (المحدّد من الموقع HTTPClient.proxy.type) المستخدَم وينقل البيانات في كلا الاتجاهَين. يُعرف ذلك باسم أنفاق.

تستخدم Apigee Edge بشكل تلقائي الاتصالات النفقية لجميع حركة المرور. لإيقاف الاتصال النفقي، يجب ضبط الخاصية HTTPClient.use.tunneling على false.

رمز الخطأ: Protocol.http.ProxyTunnelCreation تعذّر

تعرض Apigee Edge رمز الخطأ protocol.http.ProxyTunnelCreationFailed إذا كان الخادم الوكيل غير قادر على إنشاء نفق بين Apigee Edge وخادم الخلفية بسبب أي مشاكل مثل الجدار الناري، وقيود ACL (قائمة التحكم في الوصول)، ومشاكل نظام أسماء النطاقات، وعدم توفّر خادم الخلفية، والمهلات، وما إلى ذلك.

يشير رمز الحالة في faultstring الخاص بالاستجابة من Apigee Edge عادةً إلى سبب محتمل عالي المستوى أدّى إلى حدوث هذا الخطأ.

نموذج سلسلة الخطأ:

Proxy refused to create tunnel with response status STATUS_CODE

الأسباب المحتملة لبعض رموز الحالة التي تم رصدها في سلسلة الخطأ:

يوضِّح الجدول التالي الأسباب المحتملة استنادًا إلى رمز الحالة المُشار إليه في faultstring:

وتر الحنجرة الوصف
رفض الخادم الوكيل إنشاء نفق حالة الاستجابة 403.

403 - Forbidden

قد يحدث ذلك بسبب قيود جدار الحماية أو قائمة التحكم بالوصول التي تم ضبطها على خادم الخلفية، ما يمنع إنشاء نفق.

رفض الخادم الوكيل إنشاء نفق حالة الاستجابة 503.

503 - Service Unavailable

يمكن أن يحدث ذلك بسبب مشاكل في نظام أسماء النطاقات أو قيود جدار الحماية أو عدم توفّر خادم الخلفية ما يمنع إنشاء النفق.

رفض الخادم الوكيل إنشاء نفق حالة الاستجابة 504

504 - Gateway Timeout

يمكن أن يحدث هذا في حال وجود مهلات أثناء إنشاء النفق.

واستنادًا إلى رمز الحالة الذي تم رصده في faultstring، عليك استخدام الأساليب المناسبة لتحديد المشكلة وحلّها. يوضّح هذا الدليل الإرشادي كيفية تحديد المشاكل وحلّها إذا لاحظت رمز الحالة 403 في faultstring لرمز الخطأ protocol.http.ProxyTunnelCreationFailed.

الأسباب المحتملة

يحدث هذا الخطأ (رمز الحالة 403) إذا كانت هناك أي قيود جدار حماية أو ACL (قائمة التحكم بالوصول) تم ضبطها على خادم الخلفية، ما يمنع إنشاء النفق بين Apigee Edge وخادم الخلفية من خلال الخادم الوكيل.

السبب الوصف تعليمات تحديد المشاكل وحلّها السارية على
رفض الخادم الوكيل إنشاء نفق حالة الاستجابة 403 يرفض الخادم الوكيل إنشاء نفق، لأنّه يتلقّى اسم مضيف الخادم الوكيل بدلاً من اسم مضيف خادم الخلفية في عنوان Host. مستخدمو Edge Private Cloud فقط

خطوات التشخيص الشائعة

استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:

أداة التتبُّع

لتشخيص الخطأ باستخدام أداة التتبُّع:

  1. فعِّل جلسة التتبُّع وإمّا:
    • انتظر حتى حدوث الخطأ، أو
    • إذا كان بإمكانك إعادة إظهار المشكلة، يمكنك الاتصال بواجهة برمجة التطبيقات لإعادة إظهار المشكلة 503 Service Unavailable باستخدام Proxy refused to create tunnel with response status 403.
  2. تأكَّد من تفعيل Show all FlowInfos (إظهار جميع عمليات التدفق):

  3. اختَر أحد الطلبات التي تعذّر تنفيذها وافحص بيانات التتبّع.
  4. التنقّل خلال المراحل المختلفة لعملية التتبّع وتحديد مكان حدوث الخطأ.
  5. سيظهر لك الخطأ عادةً بعد مرحلة بدء تدفق الطلب المستهدَف كما هو موضّح أدناه:

    دوِّن المعلومات التالية:

    خطأ: Proxy refused to create tunnel with response status 403

  6. انتقِل إلى مرحلة AX (بيانات "إحصاءات Google" المسجّلة) في التتبُّع وانقر عليها.
  7. انتقِل إلى قسم عناوين الاستجابة لـ تفاصيل المرحلة وحدِّد قيم X-Apigee-error-code وX-Apigee- error-source كما هو موضّح أدناه:

    ( عرض صورة أكبر حجمًا)

    ( عرض صورة أكبر حجمًا)

  8. ستظهر لك قيمتا X-Apigee-fault-code وX-Apigee-Error-source على هيئة protocol.http.ProxyTunnelCreationFailed وtarget على التوالي، ما يشير إلى أنّ هذا الخطأ حدث بسبب تعذُّر إنشاء نفق الخادم الوكيل بسبب عدم تسلُّم رأس المضيف المتوقَّع.

    عناوين الاستجابة القيمة
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

NGINX

لتشخيص الخطأ باستخدام سجلات الوصول إلى NGINX:

  1. إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك استخدام سجلات وصول NGINX لتحديد المعلومات الأساسية حول أخطاء 503 Service Unavailable في HTTP.
  2. تحقَّق من سجلات وصول NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log

    المكان: يتم استبدال ORG وORG وPORT# بالقيم الفعلية.

  3. ابحث عن أي أخطاء 503 تتضمّن رمز الخطأ protocol.http.ProxyTunnelCreationFailed خلال مدة معيّنة (في حال حدثت المشكلة في السابق) أو لمعرفة ما إذا كانت هناك أي طلبات لا تزال يتعذّر تنفيذها من خلال 503.
  4. إذا عثرت على أي 503 أخطاء في رمز X-Apigee-Error-code المطابق لقيمةX-Apigee-fault-code ، حدِّد قيمة X-Apigee-fault-code

    نموذج لخطأ 503 من سجلّ الوصول إلى NGINX:

    يحتوي إدخال النموذج أعلاه من سجل الوصول إلى NGINX على القيم التالية للسمة X- Apigee-error-code وX-Apigee-error-source:.

    عناوين الاستجابة القيمة
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

السبب: رفض الخادم الوكيل إنشاء نفق بحالة الاستجابة 403

التشخيص

  1. حدِّد رمز الخطأ ومصدر الخطأ لـ 503 Service Unavailable باستخدام أداة التتبُّع أو سجلات وصول NGINX كما هو موضّح في خطوات التشخيص الشائعة.
  2. راجِع رسالة الخطأ وحدِّد رمز الحالة المُشار إليه في faultstring لتعذُّر إنشاء النفق.
  3. في هذا السيناريو، يكون رمز الحالة هو 403، ويعني ذلك محظور.
  4. يعني ذلك عدم وجود حقوق أو امتيازات كافية لإنشاء النفق. وقد يحدث هذا عادةً إذا كان هناك أي قيود على جدار الحماية أو قائمة التحكم بالوصول (ACL) تمنع إنشاء النفق.
  5. راجع أي جدار حماية و/أو قيود قائمة التحكم بالوصول (ACL) التي تم ضبطها على خادم الخلفية والتي يمكن أن تمنع إنشاء النفق.
  6. بناءً على نوع جدار الحماية و/أو قيود قائمة التحكم بالوصول، عليك إصلاح المشكلة بشكل مناسب.
  7. لنلقِ نظرة على مثال عن قيد على جدار الحماية لتوضيح كيفية تحديد هذه المشكلة وحلّها:

    السيناريو: قيد جدار الحماية في خادم الخلفية يتوقع أن يحتوي عنوان المضيف دائمًا على اسم مضيف خادم الخلفية

    يمكنك استخدام إحدى الطرق التالية لتحديد عنوان المضيف الذي تم تمريره بواسطة Apigee Edge:

    التتبّع

    لتحديد عنوان المضيف باستخدام التتبع:

    1. تأكَّد من أنّ faultstring يحتوي على Proxy refused to create tunnel with response status 403 باستخدام بيانات التتبُّع كما هو موضّح في خطوات التشخيص الشائعة.
    2. انتقِل إلى مرحلة بدء تدفق الطلب المستهدَف وراجِع عناوين الطلب.
    3. تحقَّق من قيمة اسم المضيف المحدّدة في عنوان المضيف في قسم عناوين الطلب.
    4. إذا كان عنوان المضيف يحتوي على اسم مضيف الخادم الوكيل، يكون هذا هو سبب هذا الخطأ.
    5. ويرجع ذلك إلى أنّه تم ضبط جدار الحماية على الخادم الخلفي لقبول الطلبات فقط إذا كان عنوان المضيف يحتوي على اسم خادم الخلفية.
    6. لذلك عندما يحاول الخادم الوكيل إنشاء اتصال نفَقي باستخدام خادم الخلفية، يفشل مع ظهور الخطأ

      Proxy refused to create tunnel with response status 403.

      نموذج التتبّع يعرض عنوان مضيف يتضمن اسم مضيف خادم وكيل

      ( عرض صورة أكبر حجمًا)

      في نموذج التتبّع الظاهر أعلاه، يوضِّح أنّ عنوان المضيف يحتوي على اسم مضيف الخادم الوكيل. www.proxyserver.com. وبما أنّ هناك قيدًا لجدار الحماية تم ضبطه على خادم الخلفية يتوقع أن يتم تضمين اسم مضيف خادم الخلفية فقط في عنوان المضيف، ستظهر لك رسالة الخطأ Proxy refused to create tunnel with response status 403.

    tcpdump

    لتحديد عنوان المضيف باستخدام tcpdump

    1. التقِط tcpdump على الخادم الوكيل للطلبات الواردة من مكوّن معالجة الرسائل في Apigee Edge باستخدام الأمر التالي:

      tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
      

      لمزيد من المعلومات حول استخدام الأمر tcpdump، يُرجى الاطّلاع على tcpdump.

    2. حلِّل بيانات tcpdump باستخدام أداة Wireshark أو أداة مشابهة.
    3. إليك نموذج تحليل من tcpdump باستخدام Wireshark:

      ( عرض صورة أكبر حجمًا)

    4. تُظهر أرقام الحِزم 13 و14 و15 أنّ "معالج الرسائل" ينشئ اتصالاً بالخادم الوكيل من خلال عملية تأكيد اتصال TCP ثلاثية الاتجاه.
    5. في الحزمة 16، اتصل معالج الرسائل بمضيف الخادم الوكيل httpbin.org (كما هو موضح في المثال أعلاه).
    6. اختَر الحزمة 16 وافحص محتوى الحزمة بالتفصيل، لا سيما عنوان المضيف الذي يتم تمريره إلى الخادم الوكيل من خلال معالج الرسائل.

    7. يعرض النموذج أعلاه عنوان المضيف httpin.org، وهو اسم المضيف للخادم الوكيل. لذلك، عندما يحاول الخادم الوكيل إنشاء اتصال نفَقي مع خادم الخلفية من خلال تمرير عنوان المضيف httpin.org أعلاه، سيتعذر ذلك مع ظهور الخطأ Proxy refused to create tunnel with response status 403.

درجة الدقّة

السيناريو: قيد جدار الحماية في الخادم الوكيل يتوقع أن يحتوي عنوان المضيف دائمًا على اسم المضيف لخادم الخلفية

إذا تأكدت من أن السبب في حدوث هذا الخطأ هو أن الجدار الناري على الخادم الخلفي قد تم ضبطه على نحو يتوقع أن يحتوي عنوان المضيف دائمًا على اسم مضيف خادم backend، بينما يرسل معالج الرسائل اسم مضيف backend، عليك تنفيذ الخطوات التالية لحل المشكلة:

  1. اضبط الخاصية use.proxy.host.header.with.target.uri على "صحيح" في TargetEndpoint كما هو موضّح في المثال التالي:

    نموذج ضبط نقطة النهاية:

    <TargetEndpoint name="default">
      <HTTPTargetConnection>
        <URL>https://mocktarget.apigee.net/json</URL>
        <Properties>
          <Property name="use.proxy.host.header.with.target.uri">true</Property>
        </Properties>
      </HTTPTargetConnection>
    </TargetEndpoint>
    
  2. تأكَّد من أنّ الخصائص الأخرى ذات الصلة بخادم الوكيل لإعادة التوجيه قد تم ضبطها في "معالج الرسائل" على النحو التالي:

    1. راجِع الملف /opt/apigee/customer/application/message-processor.properties في كل معالج من معالجات الرسائل.
    2. تأكَّد من ضبط السمات التالية وفقًا لحالة الاستخدام أو المتطلبات:

      أمثلة لقيم المواقع:

      conf_http_HTTPClient.use.proxy=true
      conf/http.properties+HTTPClient.proxy.type=HTTP
      conf/http.properties+HTTPClient.proxy.host=PROXY_SERVER_HOST_NAME
      conf/http.properties+HTTPClient.proxy.port=PORT_#
      conf/http.properties+HTTPClient.proxy.user=USERNAME
      conf/http.properties+HTTPClient.proxy.password=PASSWORD
      

ضرورة جمع معلومات التشخيص

في حال استمرار المشكلة حتى بعد اتّباع التعليمات الواردة أعلاه، يمكنك جمع معلومات التشخيص التالية، ثم التواصل مع فريق دعم Apigee Edge:

إذا كنت مستخدم Cloud خاصًا، يُرجى تقديم المعلومات التالية:

  • رسالة الخطأ الكاملة التي تم رصدها للطلبات التي تعذّر تنفيذها
  • اسم البيئة
  • حزمة الخادم الوكيل لواجهة برمجة التطبيقات
  • ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات
  • سجلات وصول NGINX

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    المكان: يتم استبدال ORG وENV وPORT# بالقيم الفعلية.

  • سجلات نظام "معالج الرسائل"

    /opt/apigee/var/log/edge-message-processor/logs/system.log
    

المراجع