Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về
Apigee X. thông tin
Triệu chứng
Ứng dụng sẽ nhận được mã trạng thái HTTP của 404
kèm theo thông báo Not
Found
và thông báo lỗi Unable to identify proxy for host: VIRTUAL_HOST and
url: PATH
dưới dạng phản hồi cho các lệnh gọi API.
Lỗi này nghĩa là Edge không tìm thấy proxy API cho đường dẫn và máy chủ ảo đã chỉ định.
Thông báo lỗi
Ứng dụng khách nhận được mã phản hồi sau:
HTTP/1.1 404 Not Found
Ngoài ra, bạn có thể thấy một thông báo lỗi tương tự như thông báo dưới đây:
{ "fault":{ "faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token", "detail":{ "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound" } } }
Các nguyên nhân có thể
Nguyên nhân | Nội dung mô tả | Hướng dẫn khắc phục sự cố áp dụng cho |
---|---|---|
Máy chủ ảo có bí danh máy chủ trùng lặp | Nhiều máy chủ ảo có cùng bí danh máy chủ và số cổng. | Người dùng Edge Public và Private Cloud |
Các bước chẩn đoán phổ biến
Nhật ký NGINX và Trình xử lý thư sẽ giúp ích khi khắc phục lỗi 404
.
Làm theo các bước sau để kiểm tra nhật ký:
- Xem nhật ký NGINX bằng lệnh sau:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Kiểm tra các trường sau trong các mục nhập nhật ký:
Trường Giá trị Upstream_status, status
404
X-Apigee-fault-code
messaging.adaptors.http.flow.ApplicationNotFound
Ghi lại mã nhận dạng tin nhắn trong nhật ký.
- Hãy kiểm tra nhật ký Trình xử lý thông báo (
/opt/apigee/var/log/edge-message-processor/logs/system.log)
để xem liệu bạn cómessaging.adaptors.http.flow.ApplicationNotFound
cho API cụ thể hay không hoặc bạn có mã nhận dạng thông báo duy nhất ở bước 2 cho yêu cầu API hay không).Thông báo lỗi mẫu trong nhật ký Trình xử lý thư
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)
Nhật ký ở trên cho thấy mã lỗi và thông báo lỗi như sau:
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
Nguyên nhân: Nhiều máy chủ ảo có cùng tên đại diện của máy chủ và số cổng
Bộ định tuyến Apigee Edge và Trình xử lý thư sử dụng cả tiêu đề máy chủ, số cổng và đường dẫn URI để định tuyến lưu lượng truy cập đến đúng proxy API. Việc có các định nghĩa không rõ ràng như nhiều máy chủ ảo có cùng bí danh máy chủ và số cổng là một phản mẫu đã được ghi nhận trong tài liệu và có thể dẫn đến các hành vi không mong muốn. Một trong những lỗi phổ biến mà bạn sẽ thấy là lỗi 404
với thông báo Unable to identify proxy for host: VIRTUAL_HOST
and url: PATH
.
Thông thường, nếu tồn tại nhiều máy chủ ảo có cùng bí danh máy chủ, thì bạn sẽ thấy các lỗi 404
không liên tục. Điều này là do một Proxy API cụ thể có thể được định cấu hình để chỉ chấp nhận các yêu cầu trên một trong các máy chủ ảo. Khi các yêu cầu API được định tuyến đến máy chủ ảo cụ thể đã được định cấu hình trong Proxy API, bạn sẽ nhận được phản hồi thành công.
Tuy nhiên, khi yêu cầu API được định tuyến đến các máy chủ ảo khác mà Proxy API không được định cấu hình để chấp nhận yêu cầu, thì các API này sẽ không hoạt động cùng với các lỗi 404
này.
Làm theo hướng dẫn trong
404 Không thể xác định proxy cho máy chủ lưu trữ: <virtual host name> và url: <path> và khắc phục lỗi này. Nếu không có nguyên nhân nào gây ra lỗi này, hãy làm theo các bước dưới đây để xác định xem các máy chủ ảo có email đại diện trùng lặp của máy chủ lưu trữ có gây ra lỗi 404
hay không.
Chẩn đoán
Sử dụng một trong các phương thức sau để xác định xem có nhiều máy chủ ảo có cùng bí danh/cổng # của máy chủ dẫn đến lỗi 404
hay không:
- Giao diện người dùng Edge
- API Quản lý
Giao diện người dùng Edge
Hãy làm theo các hướng dẫn này để xác định xem có nhiều máy chủ ảo có cùng bí danh/cổng # của máy chủ lưu trữ đó bằng giao diện người dùng Edge hay không.
Ví dụ: nếu quan sát thấy lỗi 404
với URL http://example.com:9001/proxy1
, bạn cần tìm máy chủ ảo nào có bí danh máy chủ example.com
và cổng 9001
.
- Trong Public Cloud (Đám mây công cộng) và giao diện người dùng mới của Edge trên đám mây riêng tư:
- Chọn Admin.
- Chọn Virtual Hosts (Máy chủ ảo).
- Đối với mỗi Môi trường, hãy sử dụng bộ lọc tìm kiếm để xác định Máy chủ ảo khớp với Bí danh máy chủ lưu trữ cụ thể mà các yêu cầu API được gọi.
- Nếu bạn phát hiện nhiều Máy chủ ảo có cùng một Email đại diện của máy chủ, hãy chuyển đến phần Giải pháp để giải quyết vấn đề này.
Ví dụ:
- Trong Giao diện người dùng cũ trên đám mây riêng tư:
- Chọn thẻ API .
- Chọn Environment Configuration (Cấu hình môi trường).
- Chọn Virtual Hosts (Máy chủ ảo).
- Đối với mỗi Môi trường, hãy xem danh sách Máy chủ ảo để xem có khớp với Bí danh máy chủ lưu trữ cụ thể mà các yêu cầu API đã được gọi hay không.
- Nếu bạn thấy nhiều Máy chủ ảo khớp với cùng một Bí danh máy chủ, hãy chuyển đến phần Giải pháp để giải quyết vấn đề này.
Ví dụ:
API Quản lý
Sử dụng các hướng dẫn này để xác định xem có nhiều máy chủ ảo có cùng bí danh/cổng # của máy chủ lưu trữ đó bằng API Quản lý hay không.
Xem định nghĩa về từng máy chủ ảo ở từng môi trường thuộc tổ chức của bạn để xem máy chủ ảo nào có cùng tên đại diện của máy chủ và số cổng:
Ví dụ: nếu quan sát thấy lỗi
404
với URLhttp://example.com:9001/proxy1
, bạn cần tìm máy chủ ảo nào có bí danh máy chủexample.com
và cổng9001
.Lấy danh sách môi trường
Người dùng Public Cloud:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Người dùng Đám mây riêng tư:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
Trong trường hợp:
ORGANIZATION_NAME là tên của tổ chức
Ví dụ:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
[ "prod", "test", "dev" ]
Xem danh sách máy chủ ảo trong một môi trường
Người dùng Public Cloud:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Người dùng Đám mây riêng tư:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
Trong trường hợp:
ORGANIZATION_NAME là tên của tổ chức
ENVIRONMENT_NAME là tên của môi trường
Ví dụ:
curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
[ "default" ]
Xem định nghĩa về từng máy chủ ảo trong môi trường.
Người dùng Public Cloud:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Người dùng Đám mây riêng tư:
curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
Trong trường hợp:
ORGANIZATION_NAME là tên của tổ chức
ENVIRONMENT_NAME là tên của môi trường
VIRTUAL_HOST_NAME là tên của máy chủ ảo
Ví dụ:
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" : [ ] }
Lặp lại hai bước trên cho các môi trường khác trong tổ chức của bạn.
Trong ví dụ này, hãy lặp lại các bước cho môi trường
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" : [ ] }
Trong ví dụ này, bạn có thể thấy 2 máy chủ ảo
default
trong 2 môi trường khác nhau (test
vàdev
) đều chứa cùng tên đại diện của máy chủexample.com
và số cổng9001
. Đây là nguyên nhân gây ra lỗi404
.- Nếu bạn thấy nhiều Máy chủ ảo khớp với cùng một Bí danh máy chủ, hãy chuyển đến phần Giải pháp để giải quyết vấn đề này.
Độ phân giải
- Đảm bảo rằng mỗi máy chủ ảo chỉ chứa các tổ hợp cổng và bí danh máy chủ duy nhất.
- Nếu đã xác định được nhiều máy chủ ảo có cùng tổ hợp cổng và bí danh máy chủ, thì bạn phải cập nhật những máy chủ này bằng một bí danh máy chủ riêng biệt.
- Bạn có thể cập nhật các chế độ cài đặt này bằng giao diện người dùng Edge hoặc API Quản lý. Bạn có thể xem hướng dẫn trong phần Sửa đổi máy chủ ảo.
- Đảm bảo rằng mỗi bí danh của máy chủ lưu trữ có một mục nhập DNS thích hợp.
- Trong ví dụ thảo luận ở trên, nếu cấu hình của chúng ta có dạng như sau:
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" : [ ] }
- Bạn có thể cập nhật máy chủ ảo không chính xác để chúng không chồng chéo nhau.
- Đó là cập nhật bí danh của máy chủ lưu trữ thành
example2.com
. - Đảm bảo bí danh của máy chủ mới có mục nhập DNS tương tự như bí danh của máy chủ trước đó.
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" : [ ] }
- Thực hiện lại lệnh gọi API tới proxy và xác minh rằng bạn nhận được các phản hồi thành công một cách nhất quán:
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" } }
- Nếu vấn đề vẫn tiếp diễn, hãy chuyển đến mục Phải thu thập thông tin chẩn đoán.
Phải thu thập thông tin chẩn đoán
Nếu sự cố vẫn tiếp diễn sau khi đã làm theo hướng dẫn ở trên, hãy thu thập thông tin chẩn đoán sau đây rồi liên hệ với Bộ phận hỗ trợ Apigee:
Nếu bạn là người dùng Public Cloud, hãy cung cấp những thông tin sau:
- Tên tổ chức
- Tên môi trường
- Tên proxy API
- Hoàn tất lệnh
curl
để tái tạo lỗi404
- Nếu lỗi
404
hiện không xảy ra, hãy cung cấp khoảng thời gian kèm theo thông tin múi giờ khi lỗi404
xảy ra trong quá khứ.
Nếu bạn là người dùng Đám mây riêng tư, hãy cung cấp những thông tin sau:
- Đã phát hiện thấy thông báo lỗi hoàn chỉnh đối với các yêu cầu không thành công
- Tổ chức, Tên môi trường và Tên proxy API mà bạn đang gặp phải
lỗi
404
- Gói Proxy API
- Nhật ký truy cập NGINX
/opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log
- Nhật ký Trình xử lý thư
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Khoảng thời gian kèm theo thông tin múi giờ khi
404
lỗi xảy ra