Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào
tài liệu Apigee X. thông tin
Dấu hiệu
Ứng dụng khách nhận được mã trạng thái HTTP là 404 cùng với 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 có nghĩa là Edge không tìm thấy proxy API cho máy chủ ảo và đường dẫn đã chỉ định.
Thông báo lỗi
Ứng dụng khách sẽ 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 | 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 Cloud và Private Cloud |
Các bước chẩn đoán thường gặp
Nhật ký NGINX và Trình xử lý thông báo sẽ hữu ích trong việc khắc phục lỗi 404.
Hãy 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 mục nhập nhật ký:
Trường Giá trị Upstream_status, status404X-Apigee-fault-codemessaging.adaptors.http.flow.ApplicationNotFoundGhi lại mã thư trong nhật ký.
- Kiểm tra nhật ký Message Processor (
/opt/apigee/var/log/edge-message-processor/logs/system.log)để xem bạn cómessaging.adaptors.http.flow.ApplicationNotFoundcho API cụ thể hay không hoặc bạn có mã nhận dạng thông báo duy nhất 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ý Message Processor
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 bí danh máy chủ lưu trữ và số cổng
Bộ định tuyến và Bộ xử lý thông báo Apigee Edge sử dụng cả tiêu đề máy chủ lưu trữ, số cổng và đường dẫn URI để định tuyến lưu lượng truy cập đến đúng API proxy. Việc có các định nghĩa mơ hồ như nhiều máy chủ ảo có cùng bí danh máy chủ và số cổng là một mẫu chống lại đã được ghi lại và có thể dẫn đến những hành vi không mong muốn. Một trong những lỗi thường gặp 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 có nhiều máy chủ ảo có cùng bí danh máy chủ, thì bạn sẽ thấy lỗi 404 không liên tục. Điều này là do 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 API Proxy, bạn sẽ nhận được phản hồi thành công.
Tuy nhiên, khi các yêu cầu API được định tuyến đến các máy chủ ảo khác mà API Proxy không được định cấu hình để chấp nhận các yêu cầu, thì các API sẽ gặp lỗi 404.
Làm theo hướng dẫn trong
404 Không xác định được proxy cho máy chủ: <tên máy chủ ảo> và url: <đường dẫn> rồi khắc phục lỗi này. Nếu không có nguyên nhân nào dẫn đến lỗi này, hãy làm theo các bước bên dưới để xác định xem máy chủ ảo có bí danh máy chủ trùng lặp có gây ra lỗi 404 hay không.
Chẩn đoán
Sử dụng một trong các phương pháp sau để xác định xem có nhiều máy chủ ảo có cùng bí danh máy chủ/số cổng 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 máy chủ/cổng # hay không bằng cách sử dụng giao diện người dùng Edge.
Ví dụ: nếu gặp lỗi 404 với URL http://example.com:9001/proxy1, thì bạn cần tìm xem máy chủ ảo nào có bí danh máy chủ example.com và cổng 9001.
- Trong Đám mây công khai và giao diện người dùng Edge mới trên Đám mây riêng tư:
- Chọn Admin.
- Chọn Máy chủ ảo.
- Đối với mỗi Environment (Môi trường), hãy sử dụng bộ lọc tìm kiếm để xác định Virtual Hosts (Máy chủ ảo) khớp với Host Alias (Tên thay thế của máy chủ) cụ thể mà các yêu cầu API đã được gọi.
- Nếu bạn thấy nhiều Máy chủ ảo sử dụng cùng một Bí danh máy chủ lưu trữ, 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ổ điển trên Đám mây riêng:
- Chọn thẻ API .
- Chọn Cấu hình môi trường.
- Chọn 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ó máy chủ ảo nào khớp với Bí danh máy chủ 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ủ lưu trữ, 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ý
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 máy chủ hay không bằng cách sử dụng Management API.
Lấy định nghĩa của từng máy chủ ảo trong từng môi trường trong các tổ chức của bạn để xem máy chủ ảo nào có cùng bí danh máy chủ và số cổng:
Ví dụ: nếu gặp lỗi
404với URLhttp://example.com:9001/proxy1, thì bạn cần tìm xem máy chủ ảo nào có bí danh máy chủexample.comvà cổng9001.Lấy danh sách môi trường
Người dùng Đám mây công khai:
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:
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" ]
Lấy danh sách máy chủ ảo trong một môi trường
Người dùng Đám mây công khai:
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:
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" ]
Lấy định nghĩa của từng máy chủ ảo trong môi trường.
Người dùng Đám mây công khai:
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:
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 rằng hai máy chủ ảo
defaulttrong hai môi trường khác nhau,testvàdev, đều chứa cùng một bí danh máy chủexample.comvà 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ủ lưu trữ, 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 bí danh máy chủ và cổng duy nhất.
- Nếu đã xác định nhiều máy chủ ảo có cùng tổ hợp bí danh máy chủ và cổng, thì bạn phải cập nhật các tổ hợp này bằng một bí danh máy chủ duy nhất.
- Bạn có thể cập nhật các thông tin 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 máy chủ lưu trữ đều có một mục DNS phù 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 bị trùng lặp.
- Tức là cập nhật bí danh máy chủ lưu trữ thành
example2.com. - Đảm bảo bí danh máy chủ mới có mục nhập DNS tương tự như bí danh 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" : [ ] }' -iHTTP/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 các lệnh gọi API đến proxy và xác minh rằng bạn luôn nhận được các phản hồi thành công:
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 phần 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 vấn đề vẫn tiếp diễn ngay cả sau khi bạn 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 Nhóm hỗ trợ Apigee Edge:
Nếu bạn là người dùng Đám mây công cộng, hãy cung cấp những thông tin sau:
- Tên tổ chức
- Tên môi trường
- Tên API Proxy
- Hoàn tất lệnh
curlđể tái tạo lỗi404 - Nếu hiện tại không xảy ra lỗi
404, hãy cung cấp khoảng thời gian kèm theo thông tin về múi giờ khi lỗi404xảy ra trong quá khứ.
Nếu bạn là người dùng Đám mây riêng, hãy cung cấp những thông tin sau:
- Thông báo lỗi hoàn chỉnh được ghi nhận cho 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 quan sát thấy lỗi
404 - Gói API Proxy
- Nhật ký truy cập NGINX
/opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log - Nhật ký Bộ xử lý tin nhắn
/opt/apigee/var/log/edge-message-processor/logs/system.log - Khoảng thời gian có thông tin về múi giờ khi xảy ra lỗi
404