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

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

المشكلة

يتلقّى تطبيق العميل رمز حالة 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.ProxyTunnelCreationFailed

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

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

نموذج Faultstring:

Proxy refused to create tunnel with response status STATUS_CODE

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

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

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

403 - Forbidden

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

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

503 - Service Unavailable

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

رفض الخادم الوكيل إنشاء نفق مع حالة الرد 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. تأكَّد من تفعيل خيار عرض جميع معلومات FlowInfo:

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

    يُرجى مراعاة المعلومات التالية:

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

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

    ( عرض صورة أكبر)

    ( عرض صورة أكبر)

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

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

NGINX

لتشخيص الخطأ باستخدام سجلّات الوصول إلى NGINX، اتّبِع الخطوات التالية:

  1. إذا كنت مستخدمًا في Private Cloud، يمكنك استخدام سجلّات الوصول إلى NGINX لتحديد المعلومات الأساسية حول أخطاء HTTP 503 Service Unavailable.
  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-fault-code تتطابق مع قيمة protocol.http.ProxyTunnelCreationFailed، حدِّد قيمة X-Apigee-fault-source.

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

    يحتوي نموذج الإدخال أعلاه من سجلّ الوصول إلى NGINX على القيم التالية لـ X- Apigee-fault-code وX-Apigee-fault-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. لنأخذ مثالاً على قيود جدار الحماية لشرح كيفية تحديد المشاكل وحلّها:

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

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

    التتبّع

    لتحديد عنوان Host Header باستخدام Trace، اتّبِع الخطوات التالية:

    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.

الدقة

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

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

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

    نموذج لإعدادات 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. تأكَّد من ضبط السمات الأخرى ذات الصلة بالخادم الوكيل الأمامي في &quot;معالج الرسائل&quot; على النحو التالي:

    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:

إذا كنت مستخدمًا في Private 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

المراجع