504 مهلة البوابة - انتهت مهلة جهاز التوجيه

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

المشكلة

يتلقّى تطبيق العميل رمز حالة HTTP 504 مع الرسالة Gateway Timeout استجابةً لطلبات البيانات من واجهة برمجة التطبيقات.

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

رسالة الخطأ

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

HTTP/1.1 504 Gateway Time-out

عند استدعاء هذا الخادم الوكيل باستخدام cURL أو متصفّح ويب، قد يظهر لك الخطأ التالي:

<!DOCTYPE html>
<html>
<head>
<title>Error</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>An error occurred.</h1>
<p>Sorry, the page you are looking for is currently unavailable.<br/>
Please try again later.</p>
</body>
</html>

ما هي أسباب انتهاء المهلة؟

المسار النموذجي لطلب بيانات من واجهة برمجة التطبيقات من خلال نظام Edge هو العميل > جهاز التوجيه > إرسال رسالة المعالج > خادم الخلفية كما هو موضح في الشكل التالي:

جميع مكونات مسار تشغيل Apigee Edge بما في ذلك العملاء وأجهزة التوجيه والرسائل ويتم إعداد المعالجات وخوادم الخلفية باستخدام قيم مهلة افتراضية مناسبة ضمان ألا يستغرق اكتمال طلبات البيانات من واجهة برمجة التطبيقات وقتًا طويلاً إذا كان أي من المكونات الموجودة في لم يتم الحصول على الاستجابة من العنصر الرئيسي خلال الفترة الزمنية المحددة في انتهاء المهلة المحددة، فسيتم إنهاء مهلة المكون المحدد وسيعرض عادةً 504 Gateway Timeoutخطأ.

يوضِّح هذا الدليل الإرشادي كيفية تحديد وحلّ خطأ 504 الذي حدث عندما تنتهي مهلة جهاز التوجيه.

انتهت المهلة على جهاز التوجيه

المهلة التلقائية التي تم ضبطها على أجهزة التوجيه في Apigee Edge هي 57 ثانية. هذا هو الحد الأقصى مقدار الوقت الذي يمكن فيه تنفيذ الخادم الوكيل لواجهة برمجة التطبيقات بدايةً من وقت استلام طلب البيانات من واجهة برمجة التطبيقات على Edge وحتى يتم إرسال الرد مرة أخرى، بما في ذلك استجابة الخلفية وجميع السياسات التي يتم تنفيذها. يمكن تجاوز المهلة التلقائية في أجهزة التوجيه/المضيفات الافتراضية كما هو موضّح في ضبط مهلة وحدات الإدخال والإخراج على أجهزة التوجيه

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

في Edge، تظهر الأسباب الشائعة للخطأ 504 Gateway Timeout الناجم عن مهلة جهاز التوجيه:

السبب الوصف إرشادات استكشاف الأخطاء وإصلاحها التي تنطبق على
ضبط مهلة غير صحيحة على جهاز التوجيه يحدث ذلك إذا تم ضبط جهاز التوجيه باستخدام مدة مهلة إدخال/إخراج غير صحيحة. مستخدمو Edge Public و Private Cloud

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

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

  • تتبُّع واجهة برمجة التطبيقات
  • سجلات وصول NGINX

تتبُّع واجهة برمجة التطبيقات

لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:

  1. انتقل إلى تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق في الصفحة.
  2. فلتِر البيانات بحثًا عن 5xx أخطاء واختَر الإطار الزمني.
  3. ارسم رمز الحالة مقابل الوقت.
  4. يمكنك النقر على الخلية المحدّدة التي تعرض أخطاء 504 للاطّلاع على مزيد من التفاصيل والاطّلاع على طريقة العرض. سجلات حول هذه الأخطاء كما هو موضح أدناه:

    مثال يعرض أخطاء 504

  5. في الجزء الأيسر، انقر على عرض السجلات.

    من نافذة سجلات حركة المرور، راجِع التفاصيل التالية لبعض أخطاء 504:

    • الطلب: يوفر هذا طريقة الطلب ومعرّف الموارد المنتظم (URI) المستخدَم لإجراء المكالمات.
    • وقت الردّ: يعرض هذا الحقل إجمالي الوقت المنقضي للطلب.

    في المثال أعلاه،

    • يشير الطلب إلى GET /test-timeout.
    • مدة الاستجابة 57.001 ثانية. وهذا يعني أن جهاز التوجيه انتهت المهلة قبل أن يتمكن معالج الرسائل من الرد لأن القيمة قريبة جدًا إلى مهلة الإدخال/الإخراج التلقائية المضبوطة على جهاز التوجيه، وهي 57 ثانية

    يمكنك أيضًا الحصول على جميع السجلّات باستخدام أداة مراقبة واجهة برمجة التطبيقات. واجهة برمجة تطبيقات GET السجلات. على سبيل المثال، من خلال إرسال طلبات بحث في السجلات لـ org وenv وtimeRange وstatus، سيكون بإمكانك تنزيل جميع السجلات للمعاملات التي انتهت المهلة للعميل.

    بما أنّ ميزة "مراقبة واجهة برمجة التطبيقات" تضبط الخادم الوكيل على - (لم يتم الضبط) لهذه 504 فيمكنك استخدام واجهة برمجة التطبيقات (السجلات API) للحصول على الخادم الوكيل المرتبط للمضيف الظاهري والمسار.

    For example :

    curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
    
  6. راجِع وقت الاستجابة للاطّلاع على أخطاء 504 إضافية وتحقَّق من ذلك. لمعرفة ما إذا كان وقت الاستجابة متسقًا (تم ضبط قيمة مهلة I/O على جهاز التوجيه) وهي 57 ثانية) في جميع أخطاء 504.

سجلات وصول NGINX

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

  1. تحقَّق من سجلّات وصول NGINX:
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
  2. البحث لمعرفة ما إذا كانت هناك أي أخطاء 504 خلال مدة محدّدة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تخفق مع 504
  3. يُرجى مراعاة المعلومات التالية لبعض أخطاء 504:
    • مدة الاستجابة
    • عنوان URI للطلب

    في هذا المثال، تظهر المعلومات التالية:

    • وقت الطلب: 57.001 ثانية. وهذا يشير إلى أن انتهت مهلة جهاز التوجيه بعد 57.001 ثانية.

    • الطلب: GET /test-timeout
    • عنوان البريد الإلكتروني البديل للمضيف: myorg-test.apigee.net
  4. تحقق لمعرفة ما إذا كان وقت الطلب هو نفسه مهلة وحدات الإدخال والإخراج. في جهاز التوجيه/المضيف الافتراضي. إذا كانت الإجابة "نعم"، هذا يعني أنّ مهلة جهاز التوجيه قد انتهت قبل لم يستجب معالج الرسائل خلال هذه الفترة.

    في مثال إدخال سجل وصول NGINX الموضح أعلاه، يحدد عمود طلب الوقت الذي تبلغ مدته 57.001 ثانية قريب جدًا من ضبط مهلة الإدخال/الإخراج التلقائية. على جهاز التوجيه. يشير ذلك بوضوح إلى أنّ مهلة جهاز التوجيه انتهت قبل ظهور الرسالة. يمكن للمعالج الردّ.

  5. تحديد خادم وكيل واجهة برمجة التطبيقات الذي تم تقديم الطلب من أجله باستخدام المسار الأساسي في الطلب .

السبب: ضبط المهلة على جهاز التوجيه غير صحيح

التشخيص

  1. حدِّد ما إذا كانت أخطاء 504 قد حدثت بسبب انتهاء مهلة جهاز التوجيه قبل فيمكن أن يرد معالج الرسائل. يمكنك القيام بذلك عن طريق التحقق لمعرفة ما إذا كانت وقت الاستجابة في مراقبة واجهة برمجة التطبيقات/وقت الطلب في جهاز التوجيه (كلا الحقلين) لتمثيل المعلومات نفسها، ولكن يتم استدعاؤها بأسماء مختلفة) هي نفسها مهلة وحدات الإدخال والإخراج التي تم ضبطها في جهاز التوجيه/المضيف الافتراضي والحقلين مصدر الخطأ وخطأ تم ضبط الخادم الوكيل ورمز الخطأ على - باستخدام أداة مراقبة واجهة برمجة التطبيقات أو الوصول إلى NGINX. السجلّات كما هو موضّح في خطوات التشخيص الشائعة.
  2. تحقَّق لمعرفة ما إذا كانت قيمة مهلة الإدخال/الإخراج التي تم ضبطها على جهاز التوجيه أو المضيف الظاهري المحدّد هي أقل مقارنةً بتلك التي تم ضبطها في "معالج الرسائل" أو الخادم الوكيل لواجهة برمجة التطبيقات.

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

التحقق من مهلة وحدات الإدخال والإخراج على المضيفات الافتراضية

واجهة مستخدم Edge

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

  1. سجِّل الدخول إلى واجهة مستخدم Edge.
  2. انتقِل إلى المشرف >. المضيفون الافتراضيون:
  3. اختَر بيئة معيّنة تواجه فيها مشكلة انتهاء المهلة.
  4. حدد المضيف الافتراضي المحدد الذي تريد التحقق من قيمة مهلة I/O له.
  5. ضمن الخصائص، اعرض قيمة مهلة قراءة الخادم الوكيل بالثانية.

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

واجهات برمجة تطبيقات الإدارة

ويمكنك أيضًا التحقّق من مهلة قراءة الخادم الوكيل باستخدام واجهات برمجة التطبيقات التالية للإدارة:

  1. نفِّذ احصل على واجهة برمجة تطبيقات المضيف الافتراضي للحصول على إعدادات virtualhost كما هو موضح أدناه:

    مستخدم Cloud عام

    curl -v -X GET https://api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUALHOST_NAME -u USERNAME
    

    مستخدم Cloud خاص

    curl -v -X GET http://MANAGEMENT_SERVER_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/v/virtualhosts/VIRTUALHOST_NAME -u USERNAME
    

    المكان:

    "ORGANIZATION_NAME" هو اسم المؤسسة.

    ENVIRONMENT_NAME هو اسم البيئة.

    VIRTUALHOST_NAME هو اسم المضيف الظاهري

  2. تحقّق من القيمة التي تم ضبطها للموقع proxy_read_timeout.

    نموذج تعريف للمضيف الافتراضي

    {
      "hostAliases": [
        "api.myCompany,com",
      ],
      "interfaces": [],
      "listenOptions": [],
      "name": "secure",
      "port": "443",
      "retryOptions": [],
      "properties": {
        "property": [
          {
            "name": "proxy_read_timeout",
            "value": "120"
          }
        ]
      },
      "sSLInfo": {
        "ciphers": [],
        "clientAuthEnabled": "false",
        "enabled": "true",
        "ignoreValidationErrors": false,
        "keyAlias": "myCompanyKeyAlias",
        "keyStore": "ref://myCompanyKeystoreref",
        "protocols": []
      },
      "useBuiltInFreeTrialCert": false
    }
    

    في المثال أعلاه، تم ضبط proxy_read_timeout بقيمة 120 وهذا يعني أن مهلة وحدات الإدخال والإخراج التي تم ضبطها على هذا المضيف الظاهري هي 120. ثوانٍ.

جارٍ التحقق من مهلة وحدات الإدخال والإخراج في ملفroute.properties

  1. سجِّل الدخول إلى جهاز التوجيه.
  2. البحث عن الموقع proxy_read_timeout في دليل /opt/nginx/conf.d وتحقَّق مما إذا كان قد تم ضبطه باستخدام القيمة الجديدة على النحو التالي:
    grep -ri "proxy_read_timeout" /opt/nginx/conf.d
    
  3. التحقّق من القيمة المحدّدة للسمة proxy_read_timeout في السمة الافتراضية المحدّدة ملف إعداد المضيف.

    نموذج لنتيجة من أمر grep

    /opt/nginx/conf.d/0-default.conf:proxy_read_timeout 57;
    /opt/nginx/conf.d/0-edge-health.conf:proxy_read_timeout 1s;
    

    في مثال الإخراج أعلاه، لاحظ أن الخاصية proxy_read_timeout تحتوي على تم ضبطها بالقيمة الجديدة 57 في 0-default.conf، وهي ملف الإعداد للمضيف الظاهري الافتراضي. يشير هذا إلى أن مهلة وحدات الإدخال والإخراج إلى 57 ثانية على جهاز التوجيه للمضيف الظاهري الافتراضي. إذا كان لديك عدة مضيفين افتراضيين، سترى هذه المعلومات لكل منهم. احصل على قيمة proxy_read_timeout للمضيف الافتراضي المحدّد الذي استخدمته لإنشاء واجهة برمجة التطبيقات مكالمات تعذّر تنفيذها مع حدوث 504 خطأ.

التحقق من مهلة الإدخال/الإخراج في الخادم الوكيل لواجهة برمجة التطبيقات

يمكنك الاطّلاع على مهلة وحدات الإدخال والإخراج في ما يلي:

  • نقطة النهاية المستهدفة للخادم الوكيل لواجهة برمجة التطبيقات
  • سياسة ServiceCallout للخادم الوكيل لواجهة برمجة التطبيقات
عرض مهلة وحدات الإدخال والإخراج في نقطة النهاية المستهدفة للخادم الوكيل لواجهة برمجة التطبيقات
  1. في واجهة مستخدم Edge، حدد الخادم الوكيل المحدد لواجهة برمجة التطبيقات الذي تريد عرض وحدات الإدخال والإخراج فيه المهلة.
  2. اختَر نقطة النهاية المستهدَفة المحدّدة التي تريد التحقّق منها.
  3. اطّلِع على الموقع io.timeout.millis الذي يضم قيمة مناسبة ضمن العنصر <HTTPTargetConnection> في TargetEndpoint التكوين.

    على سبيل المثال، يتم ضبط مهلة وحدات الإدخال والإخراج في الرمز التالي على 120 ثانية:

    <Properties>
      <Property name="io.timeout.millis">120000</Property>
    </Properties>
    
عرض مهلة وحدات الإدخال والإخراج في سياسة ServiceCallout لخادم وكيل واجهة برمجة التطبيقات
  1. في واجهة مستخدم Edge، حدد الخادم الوكيل المحدد لواجهة برمجة التطبيقات الذي تريد عرض وحدات الإدخال والإخراج الجديدة به المهلة المحددة لسياسة ServiceCallout.
  2. اختَر سياسة ServiceCallout المحددة التي تريد التحقق منها.
  3. شاهد العنصر <Timeout> الذي له قيمة مناسبة أسفل إعداد <ServiceCallout>.

    على سبيل المثال، ستكون مهلة الإدخال/الإخراج للرمز التالي هي 120 ثانية:

    <Timeout>120000</Timeout>
    

التحقق من انتهاء مهلة الإدخال/الإخراج على معالِجات معالجة الرسائل

  1. قم بتسجيل الدخول إلى جهاز معالجة الرسائل.
  2. البحث عن الموقع HTTPTransport.io.timeout.millis في دليل /opt/apigee/edge-message-processor/conf باستخدام الأمر التالي:

    grep -ri "HTTPTransport.io.timeout.millis" /opt/apigee/edge-message-processor/conf
    

    نموذج الناتج

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
    
  3. في مثال الإخراج أعلاه، لاحظ أن الخاصية تم ضبط HTTPTransport.io.timeout.millis على القيمة 55000 في http.properties يشير ذلك إلى أنّه قد تم ضبط مهلة وحدات الإدخال والإخراج بنجاح على 55 ثانية على معالج الرسائل.

بعد تحديد المهلة التي تمت تهيئتها في جهاز التوجيه ومعالج الرسائل، تحقق مما إذا كانت تم ضبط جهاز التوجيه/المضيف الافتراضي بقيمة مهلة أقل مقارنةً بالقيمة المحددة في معالج الرسائل/الخادم الوكيل لواجهة برمجة التطبيقات.

قم بتدوين القيم المحددة في جميع الطبقات كما هو موضح في الجدول التالي:

المهلة على جهاز التوجيه (بالثواني) المهلة على المضيف الظاهري (بالثواني) المهلة في معالج الرسائل (بالثواني) مهلة الخادم الوكيل لواجهة برمجة التطبيقات (بالثواني)
57 - 55 120

في هذا المثال:

  • يتم ضبط القيمة التلقائية التي تبلغ 57 ثانية على جهاز التوجيه.
  • لم يتم ضبط قيمة المهلة على المضيف الظاهري المحدّد. وهذا يعني أنها ستستخدم دالة الرسم القيمة الافتراضية وهي 57 ثانية التي تم ضبطها في جهاز التوجيه نفسه.
  • في معالج الرسائل، يتم ضبط قيمة افتراضية مدتها 55 ثانية.
  • ومع ذلك، في الخادم الوكيل لواجهة برمجة التطبيقات المحدّد، يتم ضبط قيمة 120 ثانية.

ملاحظة: يتم ضبط قيمة المهلة الأعلى على الخادم الوكيل لواجهة برمجة التطبيقات فقط، ولكن لا يزال جهاز التوجيه يتم إعداده بمدة 57 ثانية. وبالتالي، تنتهي مهلة جهاز التوجيه عند 57 ثانية أثناء إرسال لا يزال معالج البيانات/الخلفية يعالج طلبك. سيؤدّي ذلك إلى ردّ جهاز التوجيه عبر خطأ 504 Gateway Timeout في تطبيق العميل.

الدقة

نفِّذ الخطوات التالية لضبط مهلة وحدات الإدخال والإخراج المناسبة على جهاز التوجيه والرسالة إلى معالج البيانات لحل هذه المشكلة.

  1. ارجع إلى أفضل الممارسات لضبط مهلة وحدات الإدخال والإخراج لمعرفة قيم المهلة يجب ضبطه على مكوّنات مختلفة في تدفق طلب واجهة برمجة التطبيقات من خلال Apigee Edge.
  2. في المثال أعلاه، إذا كنت متأكدًا من أنه يجب تعيين قيمة مهلة أعلى لأن خادم الخلفية يتطلب وقتًا أطول، وتمت زيادة المهلة معالج الرسائل على 120 ثانية، ثم قم بتعيين قيمة مهلة أعلى مثال: 123 seconds على جهاز التوجيه. لتجنُّب التأثير في جميع الخوادم الوكيلة لواجهة برمجة التطبيقات بسبب قيمة المهلة الجديدة، يمكنك ضبط قيمة 123 seconds فقط على مضيف افتراضي محدد يُستخدم في الخادم الوكيل لواجهة برمجة التطبيقات المحدد.
  3. اتّبِع التعليمات الواردة في ضبط مهلة الإدخال/الإخراج على أجهزة التوجيه لضبط المهلة على المضيف الظاهري.