คุณกำลังดูเอกสารประกอบของ 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 และโปรแกรมประมวลผลข้อความจะเป็นประโยชน์ในการแก้ไขข้อผิดพลาด 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 ไม่สามารถระบุพร็อกซีสำหรับโฮสต์: <ชื่อโฮสต์เสมือนจริง> และ url: <path>
และแก้ไขข้อผิดพลาดนี้ หากไม่มีสาเหตุใดที่ทำให้เกิดข้อผิดพลาดนี้ ให้ใช้ขั้นตอนด้านล่างเพื่อพิจารณาว่าโฮสต์เสมือนที่มีชื่อแทนโฮสต์ซ้ำกันทำให้เกิดข้อผิดพลาด 404
หรือไม่
การวินิจฉัย
ใช้วิธีใดวิธีหนึ่งต่อไปนี้เพื่อหาว่าโฮสต์เสมือนหลายรายการมีชื่อแทนโฮสต์/พอร์ต # เดียวกันซึ่งทำให้เกิดข้อผิดพลาด 404
หรือไม่
- UI ของ Edge
- API การจัดการ
UI ของ Edge
ใช้วิธีการเหล่านี้เพื่อพิจารณาว่ามีโฮสต์เสมือนหลายรายการมีชื่อแทนโฮสต์/พอร์ต # เดียวกันโดยใช้ Edge UI หรือไม่
เช่น หากพบข้อผิดพลาด 404
ที่มี URL http://example.com:9001/proxy1
คุณต้องหาว่าโฮสต์เสมือนใดที่มีชื่อแทนโฮสต์ example.com
และพอร์ต 9001
- ใน Public Cloud และ UI ใหม่ของ Edge บน Private Cloud ให้ทำดังนี้
- เลือกผู้ดูแลระบบ
- เลือก Virtual Hosts
- สำหรับสภาพแวดล้อมแต่ละรายการ ใช้ตัวกรองการค้นหาเพื่อกำหนดโฮสต์เสมือนที่ตรงกับชื่อแทนโฮสต์ที่เจาะจงซึ่งมีการเรียกใช้คำขอ API
- หากเห็นโฮสต์เสมือนหลายรายการที่ใช้ชื่อแทนโฮสต์เดียวกัน โปรดไปที่การแก้ปัญหาเพื่อแก้ไขปัญหานี้
เช่น
- ใน UI แบบคลาสสิกบน Private Cloud ให้ทำดังนี้
- เลือกแท็บ API
- เลือกการกำหนดค่าสภาพแวดล้อม
- เลือก Virtual Hosts
- สำหรับสภาพแวดล้อมแต่ละรายการ ให้ดูรายการโฮสต์เสมือนเพื่อดูว่ามีรายการใดตรงกับชื่อแทนของโฮสต์ที่มีการเรียกใช้คำขอ API หรือไม่
- หากเห็นโฮสต์เสมือนหลายรายการที่ตรงกับชื่อแทนโฮสต์เดียวกัน โปรดไปที่การแก้ปัญหาเพื่อแก้ไขปัญหานี้
เช่น
API การจัดการ
ใช้วิธีการเหล่านี้เพื่อพิจารณาว่ามีโฮสต์เสมือนหลายโฮสต์ที่มีชื่อแทนโฮสต์/พอร์ต # เดียวกันโดยใช้ Management API หรือไม่
ดูคำจำกัดความของโฮสต์เสมือนแต่ละรายการในแต่ละสภาพแวดล้อมในองค์กรเพื่อดูว่าโฮสต์เสมือนใดมีชื่อแทนโฮสต์และหมายเลขพอร์ตเดียวกัน
เช่น หากพบข้อผิดพลาด
404
ที่มี URLhttp://example.com:9001/proxy1
คุณต้องหาว่าโฮสต์เสมือนใดที่มีชื่อแทนโฮสต์example.com
และพอร์ต9001
ดูรายการสภาพแวดล้อม
ผู้ใช้ Public Cloud
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
ผู้ใช้ Private 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" ]
รับรายการโฮสต์เสมือนในสภาพแวดล้อม
ผู้ใช้ Public Cloud
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
ผู้ใช้ Private 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" ]
ดูคำจำกัดความของโฮสต์เสมือนแต่ละรายการในสภาพแวดล้อม
ผู้ใช้ Public Cloud
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
ผู้ใช้ Private 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" : [ ] }
ทำทั้ง 2 ขั้นตอนข้างต้นซ้ำสำหรับสภาพแวดล้อมอื่นๆ ในองค์กร
ในตัวอย่างนี้ ให้ทําตามขั้นตอนซ้ำสําหรับสภาพแวดล้อม
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" : [ ] }
ในตัวอย่างนี้ คุณจะเห็นว่าโฮสต์เสมือน 2 รายการ
default
ในสภาพแวดล้อมที่แตกต่างกัน 2 รายการ คือtest
และdev
ซึ่งทั้งคู่มีชื่อแทนโฮสต์example.com
และหมายเลขพอร์ต9001
เดียวกัน ซึ่งเป็นสาเหตุของข้อผิดพลาด404
- หากเห็นโฮสต์เสมือนหลายรายการที่ตรงกับชื่อแทนโฮสต์เดียวกัน โปรดไปที่การแก้ปัญหาเพื่อแก้ไขปัญหานี้
ความละเอียด
- ตรวจสอบว่าโฮสต์เสมือนแต่ละรายการมีเฉพาะชื่อแทนโฮสต์และชุดพอร์ตที่ไม่ซ้ำกันเท่านั้น
- หากระบุโฮสต์เสมือนหลายรายการที่มีชื่อแทนโฮสต์และคู่พอร์ตเดียวกัน คุณต้องอัปเดตโฮสต์เหล่านี้ด้วยชื่อแทนโฮสต์ที่ไม่ซ้ำกัน
- คุณอัปเดตข้อมูลเหล่านี้ได้โดยใช้ Edge UI หรือ Management 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
หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ โปรดระบุข้อมูลต่อไปนี้
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- ชื่อพร็อกซี API
- ใช้คำสั่ง
curl
ให้เสร็จสมบูรณ์เพื่อจำลองข้อผิดพลาด404
ซ้ำ - หากข้อผิดพลาด
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