شما در حال مشاهده اسناد 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 خودداری کرد | این ممکن است به دلیل محدودیت های فایروال یا ACL پیکربندی شده روی سرور باطن که از ایجاد تونل جلوگیری می کند رخ دهد. |
پروکسی از ایجاد تونل با وضعیت پاسخ 503 خودداری کرد | این می تواند به دلیل مشکلات DNS، محدودیت های فایروال، در دسترس نبودن سرور بک اند که از ایجاد تونل جلوگیری می کند رخ دهد. |
پروکسی از ایجاد تونل با وضعیت پاسخ 504 خودداری کرد | این ممکن است در صورتی اتفاق بیفتد که در حین ایجاد تونل وقفه هایی وجود داشته باشد |
بسته به کد وضعیت مشاهده شده در faultstring
، باید از تکنیک های مناسب برای عیب یابی استفاده کنید. این کتاب راهنما توضیح میدهد که اگر کد وضعیت 403
را در faultstring
protocol.http.ProxyTunnelCreationFailed
کد خطا مشاهده کنید، چگونه مشکل را عیبیابی کنید.http.ProxyTunnelCreationFailed.
علل احتمالی
این خطا (کد وضعیت 403
) در صورتی رخ می دهد که محدودیت های فایروال یا ACL (فهرست کنترل دسترسی) روی سرور باطن پیکربندی شده باشد که مانع از ایجاد تونل بین Apigee Edge و سرور باطن توسط سرور پراکسی شود.
علت | توضیحات | دستورالعمل های عیب یابی قابل اجرا برای |
---|---|---|
پروکسی از ایجاد تونل با وضعیت پاسخ 403 خودداری کرد | سرور پروکسی از ایجاد تونل خودداری می کند زیرا نام میزبان سرور پروکسی را به جای نام میزبان سرور Backend در هدر Host دریافت می کند. | فقط کاربران Edge Private Cloud |
مراحل تشخیص رایج
برای تشخیص این خطا از یکی از ابزارها/تکنیک های زیر استفاده کنید:
ابزار ردیابی
برای تشخیص خطا با استفاده از ابزار Trace:
- جلسه ردیابی را فعال کنید و یا:
- صبر کنید تا خطا رخ دهد، یا
- اگر میتوانید مشکل را بازتولید کنید، با API تماس بگیرید تا مشکل
503 Service Unavailable
باProxy refused to create tunnel with response status 403
.
اطمینان حاصل کنید که نمایش همه FlowInfos فعال است:
- یکی از درخواست های ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
- در مراحل مختلف ردیابی پیمایش کنید و محل وقوع شکست را پیدا کنید.
طبق شکل زیر، معمولاً پس از شروع جریان درخواست هدف فاز، خطا را مشاهده خواهید کرد:
به اطلاعات زیر توجه کنید:
خطا:
Proxy refused to create tunnel with response status 403
- در Trace به فاز AX (Analytics Data Recorded) بروید و روی آن کلیک کنید.
به بخش Phase Details Response Headers بروید و مقادیر X-Apigee-fault-code و X-Apigee-fault-source را مطابق شکل زیر تعیین کنید:
مقادیر 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:
- اگر کاربر Private Cloud هستید، میتوانید از گزارشهای دسترسی NGINX برای تعیین اطلاعات کلیدی مربوط به خطاهای
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 را تعیین کنید.نمونه خطای 503 از گزارش دسترسی NGINX:
ورودی نمونه بالا از گزارش دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:
سرصفحه های پاسخ ارزش X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
علت: پروکسی از ایجاد تونل با وضعیت پاسخ 403 خودداری کرد
تشخیص
- کد خطا و منبع خطا را برای
503 Service Unavailable
با استفاده از Trace Tool یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید. - پیغام خطا را مرور کنید و کد وضعیت نشان داده شده در
faultstring
را برای شکست در ایجاد تونل تعیین کنید. - در این سناریو کد وضعیت
403
است که به معنای ممنوع است. - این بدان معناست که حقوق یا امتیازات کافی برای ایجاد تونل وجود ندارد. این معمولاً در صورتی اتفاق میافتد که محدودیتهای فایروال یا ACL (فهرست کنترل دسترسی) وجود داشته باشد که از ایجاد تونل جلوگیری کند.
- هرگونه محدودیت فایروال و/یا ACL را که بر روی سرور باطن شما پیکربندی شده است که می تواند از ایجاد تونل جلوگیری کند، مرور کنید.
- بسته به نوع فایروال و/یا محدودیت های ACL، باید مشکل را به درستی برطرف کنید.
اجازه دهید یک مثال محدودیت فایروال را برای توضیح نحوه عیب یابی و حل این مشکل در نظر بگیریم:
سناریو: محدودیت فایروال در سرور باطن انتظار دارد که سربرگ میزبان باید همیشه حاوی نام میزبان سرور باطن باشد
میتوانید از یکی از راههای زیر برای تعیین سربرگ میزبان توسط Apigee Edge استفاده کنید:
ردیابی
برای تعیین سربرگ میزبان با استفاده از Trace:
- اطمینان حاصل کنید که
faultstring
حاویProxy refused to create tunnel with response status 403
با استفاده از ردیابی است که در مراحل تشخیص رایج توضیح داده شده است. - به فاز Target Request Flow Started بروید و سرصفحه های درخواست را بررسی کنید
- مقدار نام میزبان مشخص شده در هدر Host در بخش Request Headers را بررسی کنید.
- اگر هدر Host حاوی نام میزبان پروکسی باشد، دلیل این خطا همین است.
- این به این دلیل است که فایروال روی سرور بکاند پیکربندی شده است تا درخواستها را تنها در صورتی بپذیرد که سربرگ میزبان شامل نام سرور باطن باشد.
- بنابراین هنگامی که سرور پروکسی سعی می کند تونل را با سرور باطن ایجاد کند، با خطا مواجه می شود.
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 آورده شده است:
- بسته شماره 13 ، 14 و 15 نشان می دهد که پردازشگر پیام در حال برقراری ارتباط با سرور پراکسی از طریق یک فرآیند سه طرفه دست دادن TCP است.
- در بسته 16 ، پردازشگر پیام به میزبان پروکسی
httpbin.org
متصل شده است (در مثال بالا نشان داده شده است). بسته 16 را انتخاب کنید و محتوای بسته را با جزئیات بررسی کنید و به طور خاص سربرگ میزبان توسط پردازشگر پیام به سرور پراکسی ارسال شود.
- نمونه بالا Host Header
httpin.org
را نشان می دهد که نام میزبان سرور پراکسی است. بنابراین، هنگامی که سرور پروکسی سعی میکند با عبور از Host Headerhttpin.org
، تونل را با سرور باطن ایجاد کند، با خطایProxy refused to create tunnel with response status 403
شکست میخورد.
- اطمینان حاصل کنید که
قطعنامه
سناریو: محدودیت فایروال در سرور پروکسی انتظار دارد که سربرگ میزبان باید همیشه شامل نام میزبان سرور باطن باشد
اگر مطمئن شده اید که این خطا به این دلیل است که فایروال روی سرور باطن به گونه ای پیکربندی شده است که انتظار دارد سربرگ میزبان همیشه حاوی نام میزبان سرور باطن باشد، در حالی که پردازشگر پیام در حال ارسال نام میزبان سرور پروکسی است، سپس مراحل زیر را برای حل کردن انجام دهید. موضوع:
همانطور که در مثال زیر نشان داده شده است، ویژگی
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>
اطمینان حاصل کنید که سایر ویژگی های مربوط به پروکسی فوروارد در پردازشگر پیام به صورت زیر پیکربندی شده اند:
- فایل
/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