502 Bad Gateway - پاسخ 405 بدون Allow Header

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

علامت

برنامه سرویس گیرنده کد وضعیت HTTP 502 Bad Gateway را با protocol.http.Response405WithoutAllowHeader کد خطا دریافت می کند.http.Response405WithoutAllowHeader به عنوان پاسخی برای تماس های API.

پیغام خطا

برنامه مشتری کد پاسخ زیر را دریافت می کند:

HTTP/1.1 502 Bad Gateway

علاوه بر این، ممکن است پیغام خطای زیر را مشاهده کنید:

{
   "fault":{
      "faultstring":"Received 405 Response without Allow Header",
      "detail":{
         "errorcode":"protocol.http.Response405WithoutAllowHeader"
      }
   }
}

علل احتمالی

این خطا در صورتی رخ می دهد که سرور باطن با کد وضعیت 405 Method Not Allowed بدون هدر Allow پاسخ دهد.

طبق مشخصات RFC 7231، بخش 6.5.5: روش 405 مجاز نیست ، انتظار می رود که سرور مبدا باید یک فیلد هدر Allow را در پاسخ 405 ایجاد و ارسال کند که حاوی لیستی از روش های پشتیبانی شده در حال حاضر منبع هدف است. اگر نه، Apigee با 502 Bad Gateway و protocol.http.Response405WithoutAllowHeader کد خطا پاسخ می دهد.http.Response405WithoutAllowHeader.

علت توضیحات دستورالعمل های عیب یابی قابل اجرا برای
پاسخ 405 بدون اجازه هدر از سرور باطن سرور باطنی که درخواست API را پردازش می کند با کد وضعیت 405 بدون هدر Allow پاسخ می دهد. کاربران Edge Public و Private Cloud

مراحل تشخیص رایج

برای تشخیص این خطا از یکی از ابزارها/تکنیک های زیر استفاده کنید:

مانیتورینگ API

برای تشخیص خطا با استفاده از API Monitoring:

  1. به عنوان کاربر با نقش مناسب وارد رابط کاربری Edge شوید.
  2. به سازمانی که می‌خواهید در آن موضوع را بررسی کنید بروید.

    لیست کشویی org
  3. به صفحه Analyze > API Monitoring > Investigate بروید.
  4. بازه زمانی خاصی را که در آن خطاها را مشاهده کرده اید انتخاب کنید.
  5. کد خطا را در برابر زمان ترسیم کنید.

  6. سلولی را انتخاب کنید که دارای protocol.http.Response405WithoutAllowHeader کد خطا است.http.Response405WithoutAllowHeader مانند شکل زیر:

  7. اطلاعات مربوط به protocol.http.Response405WithoutAllowHeader کد خطا.http.Response405WithoutAllowHeader مطابق شکل زیر نمایش داده می شود:

  8. روی View logs کلیک کنید و یکی از درخواست های ناموفق را برای مشاهده اطلاعات بیشتر گسترش دهید.

  9. از پنجره Logs به جزئیات زیر توجه کنید:
    • کد وضعیت: 502
    • منبع خطا: target
    • کد خطا: protocol.http.Response405WithoutAllowHeader .
  10. اگر منبع خطا target است و کد خطا protocol.http.Response405WithoutAllowHeader است.http.Response405WithoutAllowHeader، پس این نشان می‌دهد که سرور باطن با کد وضعیت 405 Method Not Allowed بدون هدر Allow پاسخ داده است.

ابزار ردیابی

برای تشخیص خطا با استفاده از ابزار Trace:

  1. جلسه ردیابی و یکی را فعال کنید
    • صبر کنید تا خطای 502 Bad Gateway رخ دهد یا
    • اگر می‌توانید مشکل را بازتولید کنید، با API تماس بگیرید تا مشکل تکرار شود - خطای 502 Bad Gateway
  2. اطمینان حاصل کنید که نمایش همه FlowInfos فعال است:

  3. یکی از درخواست های ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
  4. در مراحل مختلف ردیابی پیمایش کنید و محل وقوع شکست را پیدا کنید.
  5. خطا را معمولاً در یک جریان پس از ارسال درخواست به سرور هدف، مطابق شکل زیر خواهید دید:

  6. به مقدار خطا از ردیابی توجه کنید.

    ردیابی نمونه بالا خطا را به صورت Received 405 Response without Allow Header نشان می دهد. از آنجایی که این خطا توسط Apigee پس از ارسال درخواست به سرور باطن مطرح می شود، نشان می دهد که سرور باطن کد وضعیت پاسخ 405 را بدون هدر Allow ارسال کرده است.

  7. در Trace به فاز AX (Analytics Data Recorded) بروید و روی آن کلیک کنید.
  8. به قسمت Error / Response Headers در پانل جزئیات فاز بروید و مقادیر X-Apigee-fault-code و X-Apigee-fault-source را مطابق شکل زیر تعیین کنید:

  9. مقادیر X-Apigee-fault-code و X-Apigee-fault-source را Allow target به عنوان protocol.http.Response405WithoutAllowHeader مشاهده خواهید کرد 405 .
    سرصفحه های پاسخ ارزش
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

NGINX

برای تشخیص خطا با استفاده از گزارش های دسترسی NGINX:

  1. اگر کاربر Private Cloud هستید، می توانید از گزارش های دسترسی NGINX برای تعیین اطلاعات کلیدی مربوط به خطاهای HTTP 502 استفاده کنید.
  2. گزارش های دسترسی NGINX را بررسی کنید:

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

    جایی که: ORG ، ORG و، PORT# با مقادیر واقعی جایگزین می‌شوند.

  3. جستجو کنید تا ببینید آیا خطاهای 502 با protocol.http.Response405WithoutAllowHeader کد خطا وجود دارد.http.Response405WithoutAllowHeader در طول مدت زمان مشخص (اگر مشکل در گذشته اتفاق افتاده باشد) یا اینکه آیا درخواست هایی هنوز با 502 ناموفق هستند.
  4. اگر هر گونه خطای 502 با کد X-Apigee-fault-code مطابق با مقدار protocol.http.Response405WithoutAllowHeader پیدا کردید، سپس مقدار X-Apigee-fault-source را تعیین کنید.

    نمونه خطای 502 از گزارش دسترسی NGINX:

    ورودی نمونه بالا از گزارش دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:

    سرصفحه های پاسخ ارزش
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

علت: پاسخ 405 بدون اجازه دادن به هدر از سرور باطن

تشخیص

  1. کد خطا و منبع خطا را برای 502 Bad Gateway با استفاده از API Monitoring، Trace Tool یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید.
  2. اگر کد خطا protocol.http.Response405WithoutAllowHeader است.http.Response405WithoutAllowHeader و منبع خطا دارای مقدار target باشد، این نشان می دهد که سرور باطن با کد وضعیت 405 بدون هدر Allow پاسخ داده است. بنابراین، Apigee با 502 Bad Gateway با protocol.http.Response405WithoutAllowHeader کد خطا پاسخ می دهد.http.Response405WithoutAllowHeader.

قطعنامه

برای حل مشکل از یکی از روش های زیر استفاده کنید:

سرور Backend

گزینه شماره 1: سرور Backend را برای ارسال کد وضعیت 405 با هدر Allow رفع کنید:

  1. اطمینان حاصل کنید که سرور Backend همیشه به مشخصات RFC 7231، بخش 6.5.5: 405 Method Not Allowed پایبند است و با درج لیست روش هایی که به عنوان بخشی از هدر Allow مجاز هستند، مطابق شکل زیر، کد وضعیت 405 را ارسال می کند:

    Allow: HTTP_METHODS
  2. به عنوان مثال، اگر سرور باطن شما متدهای GET ، POST و HEAD را مجاز می‌کند، باید مطمئن شوید که هدر Allow آنها را به صورت زیر در بر دارد:
    Allow: GET, POST, HEAD

رسیدگی به خطا

گزینه شماره 2: از Fault Handling برای ارسال کد وضعیت 405 با هدر Allow از پروکسی API خود استفاده کنید:

اگر سرور پشتیبان کد وضعیت 405 را بدون هدر Allow برگرداند، می توانید از مدیریت خطا برای پاسخ دادن با کد وضعیت 405 و هدر Allow از پروکسی API خود به صورت زیر استفاده کنید:

  1. یک خط مشی مانند خط مشی AssignMessage یا سیاست RaiseFault ایجاد کنید و کد وضعیت را با عنوان Allow و یک پیام سفارشی روی 405 تنظیم کنید.

    نمونه خط مشی AssignMessage برای ارسال 405 با هدر Allow:

    <AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader">
        <DisplayName>AM-405WithAllowHeader</DisplayName>
        <Set>
            <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload>
            <StatusCode>405</StatusCode>
            <ReasonPhrase>Method Not Allowed</ReasonPhrase>
        </Set>
        <Add>
            <Headers>
                <Header name="Allow">GET, POST, HEAD</Header>
            </Headers>
        </Add>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
  2. یک FaultRule در TargetEndpoint ایجاد کنید، که با دریافت خطای 502 با protocol.http.Response405WithoutAllowHeader کد خطا، خط مشی را فراخوانی می کند.http.Response405WithoutAllowHeader.

    نمونه پیکربندی TargetEndpoint که FaultRule را نشان می دهد:

    <TargetEndpoint name="default">
    ...
        <FaultRules>
           <FaultRule name="405WithoutAllowHeader">
                <Step>
                    <Name>AM-405WithAllowHeader</Name>
                </Step>
                <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition>
            </FaultRule>
        </FaultRules>
  3. این تغییرات را در یک ویرایش جدید از پروکسی API خود ذخیره کنید و ویرایش را اجرا کنید.
  4. تماس‌های API را برقرار کنید و تأیید کنید که کد وضعیت 405 را با هدر Allow دریافت می‌کنید.

پیکربندی ویژگی

گزینه شماره 3: ویژگی را در Message Processor پیکربندی کنید تا Apigee Edge از بازگشت خطای 502 جلوگیری کند.

  1. اگر کاربر Private Cloud هستید، می‌توانید ویژگی HTTP.ignore.allow_header.for.405 را به true به‌روزرسانی کنید تا از ایجاد خطای 502 توسط Apigee Edge جلوگیری کنید، حتی اگر سرور backend با کد وضعیت 405 بدون هدر Allow با استفاده از راهنمای نحوه انجام: پیکربندی هدر ignore allow برای ویژگی 405 در پردازشگرهای پیام .
  2. اگر کاربر Public Cloud هستید، لطفاً با پشتیبانی Apigee Edge تماس بگیرید

مشخصات

Apigee انتظار پاسخ 405 Method Not Allowed از سرور backend به همراه هدر Allow مطابق مشخصات زیر دارد:

مشخصات
RFC 7231، بخش 6.5.5: روش 405 مجاز نیست
RFC 7231، بخش 7.4.1: اجازه دهید

نکات کلیدی قابل توجه

راه حل پیشنهادی این است که سرور باطن را تعمیر کنید تا کد وضعیت 405 را با هدر Allow ارسال کند و به مشخصات RFC 7231، بخش 6.5.5: 405 Method Not Allowed پایبند باشد.

اگر همچنان به کمک پشتیبانی Apigee نیاز دارید، به Must collect information diagnostic بروید.

باید اطلاعات تشخیصی را جمع آوری کرد

اگر حتی پس از پیروی از دستورالعمل‌های بالا، مشکل همچنان ادامه داشت، اطلاعات تشخیصی زیر را جمع‌آوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید.

اگر کاربر Public Cloud هستید، اطلاعات زیر را ارائه دهید:

  • نام سازمان
  • نام محیط زیست
  • نام پروکسی API
  • دستور کامل curl برای بازتولید 502 Bad Gateway با protocol.http.Response405WithoutAllowHeader کد خطا استفاده می شود.http.Response405WithoutAllowHeader
  • فایل ردیابی برای درخواست های API

اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:

  • پیام خطای کامل برای درخواست های ناموفق مشاهده شد
  • نام محیط زیست
  • بسته پروکسی API
  • فایل ردیابی برای درخواست های API
  • گزارش های دسترسی NGINX

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

    جایی که: ORG ، ORG و، PORT# با مقادیر واقعی جایگزین می‌شوند.

  • گزارش های سیستم پردازشگر پیام
    /opt/apigee/var/log/edge-message-processor/logs/system.log

مراجع

مدیریت خطا در Apigee