شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
علامت
برنامه سرویس گیرنده کد وضعیت HTTP 404
را با پیام Not Found
و پیام خطا Unable to identify proxy for host: VIRTUAL_HOST and url: PATH
به عنوان پاسخ به تماس های API دریافت می کند.
این خطا به این معنی است که Edge نمی تواند پروکسی API را برای میزبان مجازی و مسیر مشخص شده پیدا کند.
پیغام خطا
برنامه مشتری کد پاسخ زیر را دریافت می کند:
HTTP/1.1 404 Not Found
علاوه بر این، ممکن است پیغام خطایی مشابه تصویر زیر مشاهده کنید:
{ "fault":{ "faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token", "detail":{ "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound" } } }
علل احتمالی
علت | توضیحات | دستورالعمل های عیب یابی قابل اجرا برای |
---|---|---|
میزبان مجازی با نام مستعار میزبان تکراری | چندین میزبان مجازی دارای نام مستعار میزبان و شماره پورت یکسانی هستند. | کاربران Edge Public و Private Cloud |
مراحل تشخیص رایج
گزارش های NGINX و Message Processor برای عیب یابی خطای 404
مفید خواهند بود. برای بررسی لاگ ها از مراحل زیر استفاده کنید:
- گزارش های NGINX را با استفاده از دستور زیر مشاهده کنید:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- فیلدهای زیر را در ورودی های گزارش بررسی کنید:
میدان ارزش Upstream_status, status
404
X-Apigee-fault-code
messaging.adaptors.http.flow.ApplicationNotFound
شناسه پیام را از لاگ ها یادداشت کنید.
- گزارشهای پردازشگر پیام (
/opt/apigee/var/log/edge-message-processor/logs/system.log)
را بررسی کنید تا ببینید آیاmessaging.adaptors.http.flow.ApplicationNotFound
برای API خاص دارید یا خیر شناسه پیام منحصر به فرد از مرحله 2 برای درخواست API.نمونه پیام خطا از ورود به سیستم پردازشگر پیام
NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:POST, uri:/weather, message Id:null, exception:com.apigee.rest.framework.ResourceNotFoundException{ code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather, associated contexts = []}, context:Context@342ea86b input=ClientInputChannel(SSLClientChannel[Accepted: Remote:10.123.123.123:8443 Local:10.135.33.68:62092]@1206954 useCount=1 bytesRead=0 bytesWritten=0 age=1ms lastIO=0ms isOpen=true)
گزارش بالا کد خطا را نشان می دهد و پیام خطا به شرح زیر است:
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
علت: چندین هاست مجازی با نام مستعار میزبان و شماره پورت یکسان
روترها و پردازشگرهای پیام Apigee Edge از هدر میزبان، شماره پورت و مسیرهای URI برای هدایت ترافیک به پروکسی API صحیح استفاده می کنند. داشتن تعاریف مبهم مانند میزبان های مجازی متعدد با نام مستعار میزبان و شماره پورت یکسان یک ضد الگوی مستند است و می تواند منجر به رفتارهای غیرمنتظره شود. یکی از خطاهای رایجی که مشاهده خواهید کرد، خطای 404
با پیام Unable to identify proxy for host: VIRTUAL_HOST and url: PATH
.
معمولاً اگر چندین میزبان مجازی با نام مستعار میزبان یکسان وجود داشته باشد، خطاهای متناوب 404
را مشاهده خواهید کرد. این به این دلیل است که پروکسی API خاص ممکن است به گونهای پیکربندی شود که درخواستها را فقط در یکی از میزبانهای مجازی بپذیرد. هنگامی که درخواست های API به میزبان مجازی خاصی که در پروکسی API پیکربندی شده است هدایت می شوند، پاسخ موفقیت آمیزی دریافت خواهید کرد. با این حال، هنگامی که درخواستهای API به میزبانهای مجازی دیگر که پروکسی API برای پذیرش درخواستها پیکربندی نشده است، هدایت میشوند، APIها با این خطاهای 404
شکست خواهند خورد.
دستورالعمل های داده شده در 404 شناسایی پراکسی برای میزبان: <نام میزبان مجازی> و آدرس اینترنتی: <path> امکان پذیر نیست و این خطا را عیب یابی کنید. اگر هیچ یک از دلایل منجر به این خطا نمی شود، از مراحل زیر برای تعیین اینکه آیا میزبان های مجازی با نام مستعار میزبان تکراری باعث ایجاد خطاهای 404
می شوند، استفاده کنید.
تشخیص
از یکی از روش های زیر برای تعیین اینکه آیا چندین میزبان مجازی با نام مستعار/پورت شماره میزبان یکسانی وجود دارد که منجر به خطای 404
می شود، استفاده کنید:
- رابط کاربری لبه
- API های مدیریت
رابط کاربری لبه
از این دستورالعملها برای تعیین اینکه آیا چندین میزبان مجازی با نام مستعار/پورت یک میزبان با استفاده از رابط کاربری Edge وجود دارد یا خیر، استفاده کنید.
به عنوان مثال، اگر خطای 404
را با نشانی اینترنتی http://example.com:9001/proxy1
مشاهده کردید، باید پیدا کنید کدام میزبان مجازی دارای میزبان مستعار example.com
و پورت 9001
هستند.
- در Public Cloud و Edge UI جدید در Private Cloud :
- Admin را انتخاب کنید.
- میزبان های مجازی را انتخاب کنید.
- برای هر محیط، از فیلتر جستجو برای تعیین میزبانهای مجازی استفاده کنید که با نام مستعار میزبان خاصی که درخواستهای API با آن فراخوانی شدهاند، مطابقت دارند.
- اگر چندین هاست مجازی پیدا کردید که از یک نام مستعار میزبان استفاده می کنند، برای حل این مشکل به Resolution بروید.
به عنوان مثال:
- در رابط کاربری کلاسیک در Private Cloud :
- برگه APIs را انتخاب کنید.
- Environment Configuration را انتخاب کنید.
- میزبان های مجازی را انتخاب کنید.
- برای هر محیط، فهرستی از میزبانهای مجازی را مشاهده کنید تا ببینید آیا نام مستعار میزبانی که درخواستهای API با آن فراخوانی شدهاند، مطابقت دارد یا خیر.
- اگر چندین میزبان مجازی را پیدا کردید که با همان نام مستعار میزبان مطابقت دارند، برای حل این مشکل به Resolution بروید.
به عنوان مثال:
API های مدیریت
از این دستورالعملها برای تعیین اینکه آیا چندین میزبان مجازی با نام مستعار/پورت یک میزبان با استفاده از مدیریت API وجود دارد یا خیر، استفاده کنید.
تعریف هر یک از میزبان های مجازی را در هر یک از محیط های سازمان خود دریافت کنید تا ببینید کدام هاست های مجازی دارای نام مستعار میزبان و شماره پورت یکسان هستند:
به عنوان مثال، اگر خطای
404
را با نشانی اینترنتیhttp://example.com:9001/proxy1
مشاهده کردید، باید پیدا کنید کدام میزبان مجازی دارای میزبان مستعارexample.com
و پورت9001
هستند.لیست محیط ها را دریافت کنید
کاربر عمومی ابر:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
کاربر خصوصی Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
کجا:
ORGANIZATION_NAME نام سازمان است
مثال:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
[ "prod", "test", "dev" ]
لیست هاست های مجازی در یک محیط را دریافت کنید
کاربر عمومی ابر:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
کاربر خصوصی Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
کجا:
ORGANIZATION_NAME نام سازمان است
ENVIRONMENT_NAME نام محیط است
مثال:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
[ "default" ]
تعریف هر یک از هاست های مجازی در محیط را دریافت کنید.
کاربر عمومی ابر:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
کاربر خصوصی Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
کجا:
ORGANIZATION_NAME نام سازمان است
ENVIRONMENT_NAME نام محیط است
VIRTUAL_HOST_NAME نام میزبان مجازی است
مثال:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts/default -u USERNAME
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
دو مرحله فوق را برای محیط های دیگر سازمان خود تکرار کنید.
در این مثال، مراحل را برای محیط
dev
تکرار کنید:curl http://127.0.0.1:8080/v1/organizations/myorg/environments/dev/virtualhosts -u USERNAME
[ "default" ]
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u USERNAME
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
در این مثال می بینید که دو میزبان مجازی
default
در دو محیط مختلف،test
وdev
، هر دو حاوی یک میزبان مستعارexample.com
و شماره پورت9001
هستند. این دلیل خطاهای404
است.- اگر چندین میزبان مجازی را پیدا کردید که با همان نام مستعار میزبان مطابقت دارند، برای حل این مشکل به Resolution بروید.
قطعنامه
- اطمینان حاصل کنید که هر میزبان مجازی فقط حاوی نام مستعار میزبان و ترکیب پورت منحصر به فرد باشد.
- اگر چندین هاست مجازی با نام مستعار میزبان و ترکیب پورت یکسان شناسایی کرده اید، باید آنها را با یک نام مستعار میزبان منحصر به فرد به روز کنید.
- میتوانید این موارد را با استفاده از رابط کاربری Edge یا مدیریت API بهروزرسانی کنید، دستورالعملها را میتوانید در قسمت اصلاح میزبان مجازی پیدا کنید.
- اطمینان حاصل کنید که هر نام مستعار میزبان ورودی DNS مناسبی دارد.
- در مثالی که در بالا بحث شد، اگر پیکربندی ما به این صورت بود:
curl -X GET http://localhost:8080/v1/organizations/myorg/environments -u user
[ "prod", "test", "dev" ]
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/test/virtualhosts/default -u user
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u user
{ "hostAliases" : [ "example.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
- می توانید هاست مجازی نادرست را طوری به روز کنید که همپوشانی نداشته باشند.
- این بهروزرسانی نام مستعار میزبان به عنوان
example2.com
است. - مطمئن شوید که نام مستعار میزبان جدید دارای ورودی DNS مشابه با نام مستعار میزبان قبلی است.
curl -X GET http://localhost:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u user -H 'Content-Type: application/json' -d '{ "hostAliases" : [ "example2.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }' -i
HTTP/1.1 200 OK Date: Tue, 02 Feb 2021 20:54:29 GMT Content-Type: application/json X-Apigee.user: user X-Apigee.organization: myorg X-Apigee.environment: dev X-Apigee.backends: management-server Date: Tue, 02 Feb 2021 20:54:29 GMT Content-Length: 152 { "hostAliases" : [ "example2.com" ], "interfaces" : [ ], "listenOptions" : [ ], "name" : "default", "port" : "9001", "retryOptions" : [ ] }
- دوباره با پروکسی تماس های API برقرار کنید و بررسی کنید که به طور مداوم پاسخ های موفقیت آمیزی دریافت می کنید:
curl http://example.com:9001/proxy1
{ "slideshow": { "author": "Yours Truly", "date": "date of publication", "slides": [ { "title": "Wake up to WonderWidgets!", "type:": "all" }, { "items": [ "Why WonderWidgets are great", "Who buys WonderWidgets" ], "title": "Overview", "type": "all" } ], "title": "Sample Slide Show" } }
- اگر مشکل همچنان ادامه داشت، به اطلاعات تشخیصی باید جمعآوری شود بروید.
باید اطلاعات تشخیصی را جمع آوری کرد
اگر حتی پس از پیروی از دستورالعملهای بالا، مشکل همچنان ادامه داشت، اطلاعات تشخیصی زیر را جمعآوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:
اگر کاربر Public Cloud هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط زیست
- نام پروکسی API
- برای بازتولید خطای
404
دستورcurl
کامل کنید - اگر خطاهای
404
در حال حاضر رخ نمی دهند، دوره زمانی را با اطلاعات منطقه زمانی که خطاهای404
در گذشته رخ داده است ارائه دهید.
اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:
- پیام خطای کامل برای درخواست های ناموفق مشاهده شد
- سازمان، نام محیط و نام پروکسی API که برای آنها خطاهای
404
مشاهده می کنید - بسته پروکسی API
- گزارش های دسترسی NGINX
/opt/apigee/var/log/edge-router/nginx/ ORGANIZATION_NAME ~ ENVIRONMENT_NAME . PORT# _access_log
- گزارش های پردازشگر پیام
/opt/apigee/var/log/edge-message-processor/logs/system.log
- دوره زمانی با اطلاعات منطقه زمانی که خطاهای
404
رخ داده است