سرویس 503 در دسترس نیست - ایجاد تونل پراکسی با 403 انجام نشد

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

علامت

برنامه سرویس گیرنده کد وضعیت HTTP 503 Service Unavailable با protocol.http.ProxyTunnelCreationFailed کد خطا در دسترس نیست.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 به پراکسی های API شما اجازه می دهد تا از طریق یک سرور پراکسی با سرور باطن شما ارتباط برقرار کنند همانطور که در Configure Forward Proxy توضیح داده شده است. سرور پروکسی بسته به نوع پراکسی ( که با ویژگی HTTPClient.proxy.type ) استفاده می شود، اتصال ایمن (HTTPS) یا غیر ایمن (HTTP) را به سرور پشتیبان باز می کند و داده ها را در هر دو جهت انتقال می دهد. این به عنوان تونل زنی شناخته می شود.

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

کد خطا: protocol.http.ProxyTunnelCreationFailed

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

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

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

Proxy refused to create tunnel with response status STATUS_CODE

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

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

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

403 - Forbidden

این ممکن است به دلیل محدودیت های فایروال یا ACL پیکربندی شده روی سرور باطن که از ایجاد تونل جلوگیری می کند رخ دهد.

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

503 - Service Unavailable

این می تواند به دلیل مشکلات DNS، محدودیت های فایروال، در دسترس نبودن سرور بک اند که از ایجاد تونل جلوگیری می کند رخ دهد.

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

504 - Gateway Timeout

این ممکن است در صورتی اتفاق بیفتد که در حین ایجاد تونل وقفه هایی وجود داشته باشد

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

علل احتمالی

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

علت توضیحات دستورالعمل های عیب یابی قابل اجرا برای
پروکسی از ایجاد تونل با وضعیت پاسخ 403 خودداری کرد سرور پروکسی از ایجاد تونل خودداری می کند زیرا نام میزبان سرور پروکسی را به جای نام میزبان سرور Backend در هدر Host دریافت می کند. فقط کاربران Edge Private Cloud

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

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

ابزار ردیابی

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

  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. در Trace به فاز AX (Analytics Data Recorded) بروید و روی آن کلیک کنید.
  7. به بخش Phase Details Response Headers بروید و مقادیر X-Apigee-fault-code و X-Apigee-fault-source را مطابق شکل زیر تعیین کنید:

    ( مشاهده تصویر بزرگتر )

    ( مشاهده تصویر بزرگتر )

  8. مقادیر X-Apigee-fault-code و X-Apigee-fault-source را به عنوان protocol.http.ProxyTunnelCreationFailed مشاهده خواهید کرد.http.ProxyTunnelCreationFailed و target به ترتیب، نشان می دهد که این خطا به این دلیل است که ایجاد تونل پراکسی با شکست مواجه شد زیرا سرصفحه میزبان مورد انتظار دریافت نشد.

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

NGINX

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

  1. اگر کاربر Private Cloud هستید، می‌توانید از گزارش‌های دسترسی NGINX برای تعیین اطلاعات کلیدی مربوط به خطاهای 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 با استفاده از Trace Tool یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید.
  2. پیغام خطا را مرور کنید و کد وضعیت نشان داده شده در faultstring را برای شکست در ایجاد تونل تعیین کنید.
  3. در این سناریو کد وضعیت 403 است که به معنای ممنوع است.
  4. این بدان معناست که حقوق یا امتیازات کافی برای ایجاد تونل وجود ندارد. این معمولاً در صورتی اتفاق می‌افتد که محدودیت‌های فایروال یا ACL (فهرست کنترل دسترسی) وجود داشته باشد که از ایجاد تونل جلوگیری کند.
  5. هرگونه محدودیت فایروال و/یا ACL را که بر روی سرور باطن شما پیکربندی شده است که می تواند از ایجاد تونل جلوگیری کند، مرور کنید.
  6. بسته به نوع فایروال و/یا محدودیت های ACL، باید مشکل را به درستی برطرف کنید.
  7. اجازه دهید یک مثال محدودیت فایروال را برای توضیح نحوه عیب یابی و حل این مشکل در نظر بگیریم:

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

    می‌توانید از یکی از راه‌های زیر برای تعیین سربرگ میزبان توسط Apigee Edge استفاده کنید:

    ردیابی

    برای تعیین سربرگ میزبان با استفاده از Trace:

    1. اطمینان حاصل کنید که faultstring حاوی Proxy refused to create tunnel with response status 403 با استفاده از ردیابی است که در مراحل تشخیص رایج توضیح داده شده است.
    2. به فاز Target Request Flow Started بروید و سرصفحه های درخواست را بررسی کنید
    3. مقدار نام میزبان مشخص شده در هدر Host در بخش Request Headers را بررسی کنید.
    4. اگر هدر Host حاوی نام میزبان پروکسی باشد، دلیل این خطا همین است.
    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. نمونه بالا Host Header httpin.org را نشان می دهد که نام میزبان سرور پراکسی است. بنابراین، هنگامی که سرور پروکسی سعی می‌کند با عبور از Host Header httpin.org ، تونل را با سرور باطن ایجاد کند، با خطای Proxy refused to create tunnel with response status 403 شکست می‌خورد.

قطعنامه

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

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

  1. همانطور که در مثال زیر نشان داده شده است، ویژگی use.proxy.host.header.with.target.uri را در TargetEndpoint روی true تنظیم کنید:

    نمونه پیکربندی 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 تماس بگیرید:

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

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

مراجع