‫۵۰۳ سرویس دردسترس نیست - تونل پراکسی با خطای ۴۰۳ ایجاد نشد

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

نشانه

برنامه مشتری کد وضعیت HTTP 503 Service Unavailable را با کد خطای protocol.http.ProxyTunnelCreationFailed به‌عنوان پاسخ برای فراخوانی‌های API دریافت می‌کند.

پیام خطا

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

HTTP/1.1 503 Service Unavailable

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

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

پروکسی بازارسال و تونل‌سازی

‫Apigee Edge به پراکسی‌های میانای برنامه‌سازی کاربردی شما اجازه می‌دهد ازطریق سرور پراکسی با سرور زیرینه شما ارتباط برقرار کنند، همان‌طور که در پیکربندی پراکسی بازارسال توضیح داده شده است. سرور پراکسی بسته به نوع پراکسی (نشان‌داده‌شده با دارایی HTTPClient.proxy.type) استفاده‌شده، اتصال ایمن (HTTPS) یا غیرایمنی (HTTP) به سرور زیرینه باز می‌کند و داده‌ها را در هر دو جهت منتقل می‌کند. این فرایند به‌عنوان تونل‌سازی شناخته می‌شود.

به‌طور پیش‌فرض، Apigee Edge از تونل‌سازی برای همه ترافیک استفاده می‌کند. برای غیرفعال کردن تونل‌سازی، دارایی HTTPClient.use.tunneling باید روی false تنظیم شود.

کد خطا: protocol.http.ProxyTunnelCreationFailed

اگر سرور پراکسی به‌دلیل هرگونه مشکل مثل دیوار آتش، محدودیت‌های ACL (فهرست کنترل دسترسی)، مشکلات ساناد، دردسترس نبودن سرور پشتیبان، زمان‌های اتمام، و غیره نتواند بین Apigee Edge و سرور پشتیبان تونل ایجاد کند، Apigee Edge کد خطای protocol.http.ProxyTunnelCreationFailed را برمی‌گرداند.

کد وضعیت در faultstring پاسخ از Apigee Edge معمولاً نشان‌دهنده علت احتمالی سطح بالایی است که منجر به این خطا شده است.

الگوی رشته خطا:

Proxy refused to create tunnel with response status STATUS_CODE

دلایل احتمالی برای برخی‌از کدهای وضعیت مشاهده‌شده در faultstring:

جدول زیر دلایل احتمالی را براساس کد وضعیت نشان‌داده‌شده در faultstringشرح می‌دهد:

Faultstring شرح
کارگزار پراکسی از ایجاد تونل با وضعیت پاسخ 403 خودداری کرد

403 - Forbidden

این اتفاق احتمالاً به‌دلیل محدودیت‌های دیوار آتش یا فهرست کنترل دسترسی پیکربندی‌شده در سرور زیرینه که مانع ایجاد تونل می‌شود رخ می‌دهد.

کارگزار پراکسی از ایجاد تونل با وضعیت پاسخ 503 خودداری کرد

503 - Service Unavailable

این اتفاق می‌تواند به‌دلیل مشکلات ساناد، محدودیت‌های دیوار آتش، دردسترس نبودن سرور زیرینه که مانع ایجاد تونل می‌شود، رخ دهد

کارگزار پراکسی از ایجاد تونل با وضعیت پاسخ ۵۰۴ خودداری کرد

504 - Gateway Timeout

این اتفاق ممکن است درصورت وجود زمان‌های اتمام درطول ایجاد تونل رخ دهد

بسته به کد وضعیت مشاهده‌شده در faultstring، باید از تکنیک‌های مناسب برای عیب‌یابی مشکل استفاده کنید. این کتابچه راهنما توضیح می‌دهد که اگر کد وضعیت 403 را در faultstring برای کد خطای protocol.http.ProxyTunnelCreationFailed مشاهده کردید، چگونه مشکل را عیب‌یابی کنید.

علل احتمالی

این خطا (کد وضعیت 403) زمانی رخ می‌دهد که محدودیت‌های دیوار آتش یا ACL (فهرست کنترل دسترسی) در سرور زیرینه پیکربندی شده باشد که مانع از ایجاد تونل بین Apigee Edge و سرور زیرینه توسط سرور پراکسی شود.

علت شرح دستورالعمل‌های عیب‌یابی برای موارد زیر قابل‌اجرا است
پراکسی از ایجاد تونل با وضعیت پاسخ ۴۰۳ خودداری کرد سرور پراکسی از ایجاد تونل خودداری می‌کند زیرا به‌جای نام میزبان سرور «پشتیبان»، نام میزبان سرور «پراکسی» را در سرایند Host دریافت می‌کند. فقط کاربران «فضای ابری خصوصی Edge»

مراحل متداول تشخیص خرابی

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

ابزار ردیابی

برای تشخیص خرابی بااستفاده از ابزار «ردیابی»:

  1. جلسه ردیابی و یکی از این موارد را فعال کنید:
    • منتظر بمانید تا خطا رخ دهد، یا
    • اگر می‌توانید مشکل را بازتولید کنید، فراخوانی API را برای بازتولید مشکل 503 Service Unavailable با Proxy refused to create tunnel with response status 403. انجام دهید.
  2. مطمئن شوید که نمایش همه FlowInfos فعال باشد:

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

    اطلاعات زیر را درنظر داشته باشید:

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

  6. به فاز AX (داده‌های Analytics ضبط‌شده) در ردیابی بروید و روی آن کلیک کنید.
  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. اگر کاربر «ابر خصوصی» هستید، می‌توانید از گزارش‌های دسترسی 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 را تعیین کنید.

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

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

    سرایندهای پاسخ مقدار
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

دلیل: پراکسی از ایجاد تونل با وضعیت پاسخ ۴۰۳ خودداری کرد

تشخیص

  1. کد خطا و منبع خطا را برای 503 Service Unavailable بااستفاده از «ابزار ردیابی» یا گزارش‌های دسترسی NGINX که در مراحل تشخیص خرابی متداول توضیح داده شده است تعیین کنید.
  2. پیام خطا را مرور کنید و کد وضعیت نشان‌داده‌شده در faultstring را برای عدم موفقیت در ایجاد تونل تعیین کنید.
  3. در این سناریو، کد وضعیت 403 است که به معنی ممنوع است.
  4. این یعنی حقوق یا امتیازات کافی برای ایجاد تونل وجود ندارد. این وضعیت معمولاً زمانی پیش می‌آید که محدودیت‌های دیوار آتش یا فهرست کنترل دسترسی (ACL) مانع از ایجاد تونل شود.
  5. محدودیت‌های دیوار آتش و/یا ACL را که در سرور نهایی شما پیکربندی شده است و می‌تواند مانع ایجاد تونل شود بررسی کنید.
  6. بسته به نوع دیوار آتش و/یا محدودیت‌های ACL، باید مشکل را به‌طور مناسب برطرف کنید.
  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. شماره‌های بسته ۱۳، ۱۴، و ۱۵ نشان می‌دهد که «پردازنده پیام» ازطریق فرایند دست‌دهی سه‌طرفه TCP درحال ایجاد اتصال به سرور پراکسی است.
    5. در بسته ۱۶، «پردازشگر پیام» به میزبان پراکسی httpbin.org (در مثال بالا نشان داده شده است) متصل شده است.
    6. بسته ۱۶ را انتخاب کنید و محتوای بسته را به‌طور دقیق و به‌ویژه سرایند میزبان را که «پردازنده پیام» به سرور پراکسی ارسال می‌کند بررسی کنید.

    7. نمونه بالا سرایند میزبان httpin.org را نشان می‌دهد که نام میزبان سرور پراکسی است. بنابراین، وقتی سرور پراکسی سعی می‌کند با ارسال سربرگ میزبان بالا httpin.org، تونل را با سرور زیرینه ایجاد کند، با خطای Proxy refused to create tunnel with response status 403 مواجه می‌شود.

وضوح

سناریو: محدودیت دیوار آتش در سرور پراکسی انتظار دارد سرایند میزبان همیشه حاوی نام میزبان سرور زیرینه باشد

اگر مطمئن شده‌اید که این خطا به‌دلیل پیکربندی دیوار آتش در سرور پشتیبان است که انتظار دارد سرایند میزبان همیشه حاوی نام میزبان سرور پشتیبان باشد، درحالی‌که «پردازنده پیام» نام میزبان سرور پراکسی را ارسال می‌کند، مراحل زیر را برای رفع مشکل انجام دهید:

  1. دارایی use.proxy.host.header.with.target.uri را در 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. مطمئن شوید که دارایی‌های دیگر مربوط به پراکسی بازارسال در «پردازشگر پیام» به‌صورت زیر پیکربندی شده‌اند:

    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 تماس بگیرید:

اگر کاربر «ابر خصوصی» هستید، اطلاعات زیر را ارائه دهید:

  • پیام خطای کامل مشاهده‌شده برای درخواست‌های ناموفق
  • نام محیط
  • دسته پراکسی میانای برنامه‌سازی کاربردی
  • فایل ردیابی برای درخواست‌های API
  • گزارش‌های دسترسی 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

مرجع‌ها