شما در حال مشاهده مستندات 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 به پروکسیهای API شما اجازه میدهد تا از طریق یک پروکسی سرور، همانطور که در بخش پیکربندی پروکسی رو به جلو توضیح داده شده است، با سرور backend شما ارتباط برقرار کنند. پروکسی سرور بسته به نوع پروکسی ( که با ویژگی HTTPClient.proxy.type نشان داده شده است) مورد استفاده، یک اتصال امن (HTTPS) یا غیر امن (HTTP) به سرور backend باز میکند و دادهها را در هر دو جهت منتقل میکند. این عمل به عنوان تونلینگ شناخته میشود.
به طور پیشفرض، Apigee Edge برای تمام ترافیک از تونلینگ استفاده میکند. برای غیرفعال کردن تونلینگ، ویژگی HTTPClient.use.tunneling باید روی false تنظیم شود.
کد خطا: protocol.http.ProxyTunnelCreationFailed
اگر سرور پروکسی به دلیل مشکلاتی مانند فایروال، محدودیتهای ACL (لیست کنترل دسترسی)، مشکلات DNS، در دسترس نبودن سرور backend، timeout و غیره قادر به ایجاد تونل بین Apigee Edge و سرور backend نباشد، Apigee Edge کد خطای protocol.http.ProxyTunnelCreationFailed را برمیگرداند.
کد وضعیت موجود در رشتهی faultstring پاسخ از Apigee Edge معمولاً نشاندهندهی یک علت سطح بالای احتمالی است که منجر به این خطا شده است.
الگوی رشته خطا:
Proxy refused to create tunnel with response status STATUS_CODE
دلایل احتمالی برخی از کدهای وضعیت مشاهده شده در faultstring:
جدول زیر دلایل احتمالی را بسته به کد وضعیت نشان داده شده در faultstring شرح میدهد:
| رشته خطا | توضیحات |
|---|---|
پروکسی از ایجاد تونل با وضعیت پاسخ 403 خودداری کرد | این میتواند به دلیل محدودیتهای فایروال یا ACL پیکربندی شده روی سرور backend باشد که از ایجاد تونل جلوگیری میکند. |
پروکسی از ایجاد تونل با وضعیت پاسخ 503 خودداری کرد | این میتواند به دلیل مشکلات DNS، محدودیتهای فایروال، عدم دسترسی به سرور backend که مانع ایجاد تونل میشود، رخ دهد. |
| پروکسی از ایجاد تونل با وضعیت پاسخ ۵۰۴ خودداری کرد | این اتفاق میتواند در صورت وجود وقفه در طول ایجاد تونل رخ دهد. |
بسته به کد وضعیت مشاهده شده در faultstring ، شما باید از تکنیکهای مناسب برای عیبیابی مشکل استفاده کنید. این راهنما توضیح میدهد که اگر کد وضعیت 403 را در faultstring برای کد خطای protocol.http.ProxyTunnelCreationFailed مشاهده کردید، چگونه مشکل را عیبیابی کنید.
علل احتمالی
این خطا (کد وضعیت 403 ) در صورتی رخ میدهد که محدودیتهای فایروال یا ACL (لیست کنترل دسترسی) روی سرور backend پیکربندی شده باشد که مانع از ایجاد تونل بین Apigee Edge و سرور backend توسط سرور پروکسی میشود.
| علت | توضیحات | دستورالعملهای عیبیابی قابل اجرا برای |
|---|---|---|
| پروکسی از ایجاد تونل با وضعیت پاسخ ۴۰۳ خودداری کرد | سرور پروکسی از ایجاد تونل خودداری میکند زیرا نام میزبان سرور پروکسی را به جای نام میزبان سرور Backend در هدر Host دریافت میکند. | فقط برای کاربران Edge Private Cloud |
مراحل تشخیص مشترک
برای تشخیص این خطا از یکی از ابزارها/تکنیکهای زیر استفاده کنید:
ابزار ردیابی
برای تشخیص خطا با استفاده از ابزار Trace:
- جلسه ردیابی را فعال کنید و یکی از موارد زیر را انجام دهید:
- منتظر بمانید تا خطا رخ دهد، یا
- اگر میتوانید مشکل را دوباره ایجاد کنید، فراخوانی API را برای ایجاد مجدد مشکل انجام دهید
503 Service UnavailableباProxy refused to create tunnel with response status 403.
مطمئن شوید که گزینهی Show all FlowInfos فعال است:

- یکی از درخواستهای ناموفق را انتخاب کنید و مسیر پیگیری را بررسی کنید.
- مراحل مختلف ردیابی را طی کنید و محل وقوع خرابی را پیدا کنید.
معمولاً پس از شروع مرحلهی «جریان درخواست هدف»، خطایی مانند تصویر زیر مشاهده خواهید کرد:

به اطلاعات زیر توجه کنید:
خطا:
Proxy refused to create tunnel with response status 403- در مسیر ردیابی، به مرحله AX (دادههای تحلیلی ثبتشده) بروید و روی آن کلیک کنید.
به پایین اسکرول کنید تا به بخش Phase Details Response Headers برسید و مقادیر X-Apigee-fault-code و X-Apigee-fault-source را مطابق شکل زیر تعیین کنید:


مقادیر X-Apigee-fault-code و X-Apigee-fault-source را به صورت
protocol.http.ProxyTunnelCreationFailedوtargetمشاهده خواهید کرد.targetبه ترتیب، نشان میدهد که این خطا به دلیل عدم موفقیت در ایجاد تونل پروکسی ایجاد شده است زیرا هدر میزبان مورد انتظار دریافت نشده است.هدرهای پاسخ ارزش کد خطای X-Apigee protocol.http.ProxyTunnelCreationFailedمنبع گسل X-Apigee target
انجینکس
برای تشخیص خطا با استفاده از گزارشهای دسترسی NGINX:
- اگر شما یک کاربر Private Cloud هستید، میتوانید از گزارشهای دسترسی NGINX برای تعیین اطلاعات کلیدی در مورد خطاهای HTTP
503 Service Unavailableاستفاده کنید. گزارشهای دسترسی NGINX را بررسی کنید:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ORG . PORT# _access_logکه در آن: ORG ، ORG و PORT# با مقادیر واقعی جایگزین شدهاند.
- جستجو کنید تا ببینید آیا در یک دوره زمانی خاص (اگر مشکل در گذشته رخ داده است) خطای
503با کد خطاprotocol.http.ProxyTunnelCreationFailedوجود دارد یا خیر، یا اینکه آیا درخواستهایی با503همچنان با شکست مواجه میشوند. اگر هرگونه خطای
503با کد خطای X-Apigee-fault-code که با مقدارprotocol.http.ProxyTunnelCreationFailedمطابقت دارد، پیدا کردید، مقدار منبع خطای X-Apigee-fault-source را تعیین کنید.نمونه خطای ۵۰۳ از لاگ دسترسی NGINX:

ورودی نمونه بالا از لاگ دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:
هدرهای پاسخ ارزش کد خطای X-Apigee protocol.http.ProxyTunnelCreationFailedمنبع گسل X-Apigee target
علت: پروکسی از ایجاد تونل با وضعیت پاسخ ۴۰۳ خودداری کرد
تشخیص
- کد خطا و منبع خطا را برای
503 Service Unavailableبا استفاده از ابزار Trace یا گزارشهای دسترسی NGINX، همانطور که در مراحل تشخیص مشترک توضیح داده شده است، تعیین کنید. - پیام خطا را بررسی کنید و کد وضعیت نشان داده شده در
faultstringرا برای عدم موفقیت در ایجاد تونل تعیین کنید. - در این سناریو، کد وضعیت
403است که به معنی ممنوعه (Forbidden ) است. - این بدان معناست که حقوق یا امتیازات کافی برای ایجاد تونل وجود ندارد. این معمولاً زمانی اتفاق میافتد که محدودیتهایی از سوی فایروال یا ACL (لیست کنترل دسترسی) وجود داشته باشد که از ایجاد تونل جلوگیری کند.
- هرگونه محدودیت فایروال و/یا ACL که روی سرور backend شما پیکربندی شده و میتواند از ایجاد تونل جلوگیری کند را بررسی کنید.
- بسته به نوع فایروال و/یا محدودیتهای ACL، باید مشکل را به طور مناسب برطرف کنید.
بیایید یک مثال از محدودیت فایروال بزنیم تا نحوه عیبیابی و حل این مشکل را توضیح دهیم:
سناریو: محدودیت فایروال روی سرور backend انتظار دارد که Host Header همیشه حاوی نام میزبان سرور backend باشد.
شما میتوانید از یکی از روشهای زیر برای تعیین Host Header ارسال شده توسط Apigee Edge استفاده کنید:
ردیابی
برای تعیین Host Header با استفاده از Trace:
- با استفاده از ردیابی، همانطور که در مراحل تشخیص مشترک توضیح داده شده است، مطمئن شوید که رشته
faultstringشامل خطایProxy refused to create tunnel with response status 403. - به مرحلهی «جریان درخواست هدف آغاز شده» بروید و هدرهای درخواست را بررسی کنید.
- مقدار نام میزبان مشخص شده در سربرگ میزبان در بخش سربرگهای درخواست را تأیید کنید.
- اگر هدر Host شامل نام میزبان پروکسی باشد، دلیل این خطا همین است.
- دلیل این امر این است که فایروال روی سرور backend پیکربندی شده است تا فقط درخواستهایی را بپذیرد که Host Header حاوی نام سرور backend باشد.
- بنابراین وقتی سرور پروکسی سعی میکند تونلی با سرور backend ایجاد کند، با خطای زیر مواجه میشود:
Proxy refused to create tunnel with response status 403.نمونه ردیابی که هدر میزبان را با نام میزبان پروکسی نشان میدهد

در نمونه ردیابی نشان داده شده در بالا، نشان میدهد که Host Header شامل نام پروکسی هاست
www.proxyserver.com .از آنجایی که یک محدودیت فایروال روی سرور backend پیکربندی شده است که انتظار دارد فقط نام میزبان سرور backend در Host Header موجود باشد، خطایProxy refused to create tunnel with response status 403دریافت میکنید.
تیسیپیدامپ
برای تعیین Host Header با استفاده از tcpdump
با دستور زیر، یک
tcpdumpروی سرور پروکسی برای درخواستهای دریافتی از کامپوننت Message Processor در Apigee Edge ضبط کنید:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
برای اطلاعات بیشتر در مورد استفاده از دستور
tcpdump، به tcpdump مراجعه کنید.- دادههای
tcpdumpرا با استفاده از ابزار Wireshark یا ابزاری مشابه تجزیه و تحلیل کنید. در اینجا یک نمونه تحلیل از tcpdump با استفاده از Wireshark آورده شده است:

- بستههای شماره ۱۳ ، ۱۴ و ۱۵ نشان میدهند که پردازشگر پیام از طریق یک فرآیند دستدهی سهطرفه TCP در حال برقراری ارتباط با سرور پروکسی است.
- در بسته ۱۶ ، پردازشگر پیام به میزبان پروکسی
httpbin.org(که در مثال بالا نشان داده شده است) متصل شده است. بسته ۱۶ را انتخاب کنید و محتوای بسته و به طور خاص Host Header که توسط پردازنده پیام به سرور پروکسی منتقل میشود را با جزئیات بررسی کنید.

- نمونه بالا Host Header
httpin.orgرا نشان میدهد که نام میزبان سرور پروکسی است. بنابراین، هنگامی که سرور پروکسی سعی میکند با ارسال Host Headerhttpin.orgفوق، تونلی با سرور backend ایجاد کند، با خطایProxy refused to create tunnel with response status 403مواجه میشود.
- با استفاده از ردیابی، همانطور که در مراحل تشخیص مشترک توضیح داده شده است، مطمئن شوید که رشته
وضوح تصویر
سناریو: محدودیت فایروال روی سرور پروکسی انتظار دارد که Host Header همیشه حاوی نام میزبان سرور backend باشد.
اگر متوجه شدید که این خطا به دلیل پیکربندی فایروال سرور backend به گونهای است که انتظار دارد Host Header همیشه حاوی نام میزبان سرور backend باشد، در حالی که پردازنده پیام، نام میزبان سرور پروکسی را ارسال میکند، مراحل زیر را برای حل مشکل انجام دهید:
همانطور که در مثال زیر نشان داده شده است، ویژگی
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>مطمئن شوید که سایر ویژگیهای مربوط به forward proxy در Message Processor به صورت زیر پیکربندی شدهاند:
- فایل
/opt/apigee/customer/application/message-processor.propertiesرا روی هر یک از پردازندههای پیام بررسی کنید. مطمئن شوید که ویژگیهای زیر مطابق با مورد استفاده یا الزامات شما تنظیم شدهاند:
مقادیر نمونه برای ویژگیها:
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