درحال مشاهده اسناد 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 خودداری کرد |
این اتفاق احتمالاً بهدلیل محدودیتهای دیوار آتش یا فهرست کنترل دسترسی پیکربندیشده در سرور زیرینه که مانع ایجاد تونل میشود رخ میدهد. |
کارگزار پراکسی از ایجاد تونل با وضعیت پاسخ 503 خودداری کرد |
این اتفاق میتواند بهدلیل مشکلات ساناد، محدودیتهای دیوار آتش، دردسترس نبودن سرور زیرینه که مانع ایجاد تونل میشود، رخ دهد |
| کارگزار پراکسی از ایجاد تونل با وضعیت پاسخ ۵۰۴ خودداری کرد |
این اتفاق ممکن است درصورت وجود زمانهای اتمام درطول ایجاد تونل رخ دهد |
بسته به کد وضعیت مشاهدهشده در faultstring، باید از
تکنیکهای مناسب برای عیبیابی مشکل استفاده کنید. این کتابچه راهنما توضیح میدهد که اگر کد وضعیت 403 را در faultstring
برای کد خطای protocol.http.ProxyTunnelCreationFailed مشاهده کردید، چگونه مشکل را عیبیابی کنید.
علل احتمالی
این خطا (کد وضعیت 403) زمانی رخ میدهد که محدودیتهای دیوار آتش یا ACL (فهرست کنترل دسترسی) در سرور زیرینه پیکربندی شده باشد که مانع از ایجاد تونل بین Apigee Edge و سرور زیرینه توسط سرور پراکسی شود.
| علت | شرح | دستورالعملهای عیبیابی برای موارد زیر قابلاجرا است |
|---|---|---|
| پراکسی از ایجاد تونل با وضعیت پاسخ ۴۰۳ خودداری کرد | سرور پراکسی از ایجاد تونل خودداری میکند زیرا بهجای نام میزبان سرور «پشتیبان»، نام میزبان سرور «پراکسی» را در سرایند Host دریافت میکند. |
فقط کاربران «فضای ابری خصوصی Edge» |
مراحل متداول تشخیص خرابی
برای تشخیص این خطا، از یکی از ابزارها/تکنیکهای زیر استفاده کنید:
ابزار ردیابی
برای تشخیص خرابی بااستفاده از ابزار «ردیابی»:
- جلسه ردیابی و یکی از این موارد را فعال کنید:
- منتظر بمانید تا خطا رخ دهد، یا
- اگر میتوانید مشکل را بازتولید کنید، فراخوانی API را برای بازتولید مشکل
503 Service UnavailableباProxy refused to create tunnel with response status 403. انجام دهید.
مطمئن شوید که نمایش همه FlowInfos فعال باشد:
- یکی از درخواستهای ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
- در مراحل مختلف ردیابی پیمایش کنید و مکان وقوع خطا را پیدا کنید.
معمولاً خطا را پساز مرحله جریان درخواست هدف شروع شد همانطور که در زیر نشان داده شده است خواهید دید:
اطلاعات زیر را درنظر داشته باشید:
خطا:
Proxy refused to create tunnel with response status 403- به فاز AX (دادههای Analytics ضبطشده) در ردیابی بروید و روی آن کلیک کنید.
به بخش جزئیات فاز سرایندهای پاسخ پیمایش کنید و مقادیر X-Apigee-fault-code و X-Apigee-fault-source را همانطور که در زیر نشان داده شده است تعیین کنید:
مقادیر X-Apigee-fault-code و X-Apigee-fault-source را بهترتیب بهعنوان
protocol.http.ProxyTunnelCreationFailedوtargetخواهید دید که نشان میدهد این خطا بهدلیل ناموفق بودن ایجاد تونل پراکسی ایجاد شده است زیرا سرایند میزبان موردانتظار دریافت نشده است.سرایندهای پاسخ مقدار X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailedX-Apigee-fault-source target
NGINX
برای تشخیص خطا بااستفاده از گزارشهای دسترسی NGINX:
- اگر کاربر «ابر خصوصی» هستید، میتوانید از گزارشهای دسترسی 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-fault-code protocol.http.ProxyTunnelCreationFailedX-Apigee-fault-source target
دلیل: پراکسی از ایجاد تونل با وضعیت پاسخ ۴۰۳ خودداری کرد
تشخیص
- کد خطا و منبع خطا را برای
503 Service Unavailableبااستفاده از «ابزار ردیابی» یا گزارشهای دسترسی NGINX که در مراحل تشخیص خرابی متداول توضیح داده شده است تعیین کنید. - پیام خطا را مرور کنید و کد وضعیت
نشاندادهشده در
faultstringرا برای عدم موفقیت در ایجاد تونل تعیین کنید. - در این سناریو، کد وضعیت
403است که به معنی ممنوع است. - این یعنی حقوق یا امتیازات کافی برای ایجاد تونل وجود ندارد. این وضعیت معمولاً زمانی پیش میآید که محدودیتهای دیوار آتش یا فهرست کنترل دسترسی (ACL) مانع از ایجاد تونل شود.
- محدودیتهای دیوار آتش و/یا ACL را که در سرور نهایی شما پیکربندی شده است و میتواند مانع ایجاد تونل شود بررسی کنید.
- بسته به نوع دیوار آتش و/یا محدودیتهای ACL، باید مشکل را بهطور مناسب برطرف کنید.
بیایید یک مثال از محدودیت دیوار آتش را برای توضیح نحوه عیبیابی و رفع این مشکل در نظر بگیریم: مسئله:
سناریو: محدودیت دیوار آتش در سرور زیرینه انتظار دارد «سرایند میزبان» همیشه نام میزبان سرور زیرینه را داشته باشد
میتوانید از یکی از روشهای زیر برای تعیین «سرایند میزبان» ارسالشده توسط Apigee Edge استفاده کنید:
ردیابی
برای تعیین «سرصفحه میزبان» بااستفاده از «ردیابی»:
- مطمئن شوید که
faultstringحاویProxy refused to create tunnel with response status 403است، همانطور که در مراحل تشخیص خرابی رایج توضیح داده شده است، از ردیابی استفاده کنید. - به مرحله جریان درخواست هدف شروع شد پیمایش کنید و سرایندهای درخواست را مرور کنید
- مقدار نام میزبان مشخصشده در سرصفحه میزبان را در بخش سرصفحههای درخواست درستیسنجی کنید.
- اگر سرایند میزبان حاوی نام میزبان پراکسی باشد، این دلیل این خطا است.
- دلیل این است که دیوار آتش در سرور زیرینه پیکربندی شده است تا درخواستها را فقط درصورتی بپذیرد که سرایند میزبان حاوی نام سرور زیرینه باشد.
- بنابراین وقتی سرور پراکسی سعی میکند تونل را با سرور زیرینه ایجاد کند، با این خطا مواجه میشود
Proxy refused to create tunnel with response status 403.نمونه ردیابی که نشان میدهد سرایند میزبان نام میزبان پراکسی دارد
در ردیابی نمونه نشاندادهشده در بالا، نشان داده میشود که سرایند میزبان حاوی نام میزبان پراکسی است
www.proxyserver.com.ازآنجاییکه در سرور زیرینه محدودیت دیوار آتش پیکربندی شده است که انتظار دارد فقط نام میزبان سرور زیرینه در سرایند میزبان وجود داشته باشد، خطایProxy refused to create tunnel with response status 403را دریافت میکنید.
tcpdump
برای تعیین «سرصفحه میزبان» بااستفاده از tcpdump
با فرمان زیر،
tcpdumpرا در سرور پراکسی برای درخواستهای ارسالی از جزء «پردازشگر پیام» Apigee Edge ضبط کنید:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
برای کسب اطلاعات بیشتر درباره استفاده از فرمان
tcpdump، به tcpdump مراجعه کنید.- دادههای
tcpdumpرا بااستفاده از ابزار Wireshark یا ابزاری مشابه تجزیهوتحلیل کنید. در اینجا نمونهای از تجزیهوتحلیل tcpdump بااستفاده از Wireshark آمده است:
- شمارههای بسته ۱۳، ۱۴، و ۱۵ نشان میدهد که «پردازنده پیام» ازطریق فرایند دستدهی سهطرفه TCP درحال ایجاد اتصال به سرور پراکسی است.
- در بسته ۱۶، «پردازشگر پیام» به میزبان پراکسی
httpbin.org(در مثال بالا نشان داده شده است) متصل شده است. بسته ۱۶ را انتخاب کنید و محتوای بسته را بهطور دقیق و بهویژه سرایند میزبان را که «پردازنده پیام» به سرور پراکسی ارسال میکند بررسی کنید.
- نمونه بالا سرایند میزبان
httpin.orgرا نشان میدهد که نام میزبان سرور پراکسی است. بنابراین، وقتی سرور پراکسی سعی میکند با ارسال سربرگ میزبان بالاhttpin.org، تونل را با سرور زیرینه ایجاد کند، با خطایProxy refused to create tunnel with response status 403مواجه میشود.
- مطمئن شوید که
وضوح
سناریو: محدودیت دیوار آتش در سرور پراکسی انتظار دارد سرایند میزبان همیشه حاوی نام میزبان سرور زیرینه باشد
اگر مطمئن شدهاید که این خطا بهدلیل پیکربندی دیوار آتش در سرور پشتیبان است که انتظار دارد سرایند میزبان همیشه حاوی نام میزبان سرور پشتیبان باشد، درحالیکه «پردازنده پیام» نام میزبان سرور پراکسی را ارسال میکند، مراحل زیر را برای رفع مشکل انجام دهید:
دارایی
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>مطمئن شوید که داراییهای دیگر مربوط به پراکسی بازارسال در «پردازشگر پیام» بهصورت زیر پیکربندی شدهاند:
- فایل
/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 تماس بگیرید:
اگر کاربر «ابر خصوصی» هستید، اطلاعات زیر را ارائه دهید:
- پیام خطای کامل مشاهدهشده برای درخواستهای ناموفق
- نام محیط
- دسته پراکسی میانای برنامهسازی کاربردی
- فایل ردیابی برای درخواستهای 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