คุณกำลังดูเอกสารประกอบ 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 สาธารณะและ 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ตัวอย่างข้อความแสดงข้อผิดพลาดจากบันทึก 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)
บันทึกด้านบนแสดงรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดดังนี้
code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather
สาเหตุ: โฮสต์เสมือนหลายรายการที่มีชื่อแทนโฮสต์และหมายเลขพอร์ตเดียวกัน
เราเตอร์ Edge ของ Apigee และ Message Processor จะใช้ทั้งส่วนหัวของโฮสต์ หมายเลขพอร์ต และเส้นทาง URI
เพื่อกำหนดเส้นทางการรับส่งข้อมูลไปยังพร็อกซี API ที่ถูกต้อง มีคำนิยามที่กำกวม เช่น ระบบเสมือนจริงหลายรายการ
ระบบจะจัดทำเอกสารโฮสต์ที่มีชื่อแทนโฮสต์และหมายเลขพอร์ตเดียวกัน
anti-pattern และ
อาจทำให้เกิดพฤติกรรมที่ไม่คาดคิด หนึ่งในข้อผิดพลาดทั่วไปที่คุณจะสังเกตเห็นคือ
เกิดข้อผิดพลาด 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 และ EDGE UI ใหม่บน Private Cloud ให้ทําดังนี้
- เลือกผู้ดูแลระบบ
- เลือกโฮสต์เสมือน
- สำหรับแต่ละสภาพแวดล้อม ให้ใช้ตัวกรองการค้นหาเพื่อระบุแท็กเสมือน โฮสต์ที่ตรงกับชื่อแทนโฮสต์ที่ระบุซึ่ง API มีการเรียก
- ถ้าคุณพบโฮสต์เสมือนหลายรายการที่ใช้ชื่อแทนโฮสต์เดียวกัน ให้ไปที่ การแก้ปัญหาเพื่อแก้ไขปัญหานี้
เช่น
- ใน UI แบบคลาสสิกบน Private Cloud ให้ทำดังนี้
- เลือกแท็บ API
- เลือกการกำหนดค่าสภาพแวดล้อม
- เลือกโฮสต์เสมือน
- สำหรับสภาพแวดล้อมแต่ละรายการ โปรดดูรายการโฮสต์เสมือนเพื่อดูว่ามีการจับคู่ที่ตรงกันหรือไม่ ชื่อแทนโฮสต์เฉพาะที่มีการเรียกใช้คำขอ API
- ถ้าคุณพบโฮสต์เสมือนหลายรายการที่ตรงกับชื่อแทนโฮสต์เดียวกัน โปรดไปที่ การแก้ปัญหาเพื่อแก้ไขปัญหานี้
ตัวอย่าง
API การจัดการ
ใช้วิธีการเหล่านี้เพื่อดูว่ามีโฮสต์เสมือนหลายรายการที่มีโฮสต์เดียวกันหรือไม่ ชื่อแทน/หมายเลขพอร์ตที่ใช้ API การจัดการ
ดูคำจำกัดความของโฮสต์เสมือนแต่ละโฮสต์ในแต่ละสภาพแวดล้อมใน เพื่อดูว่าโฮสต์เสมือนใดมีชื่อแทนโฮสต์และหมายเลขพอร์ตเดียวกัน:
ตัวอย่างเช่น หากคุณสังเกตเห็นข้อผิดพลาด
404
ใน URLhttp://example.com:9001/proxy1
จากนั้นคุณจะต้องหาว่า โฮสต์มีชื่อแทนโฮสต์example.com
และพอร์ต9001
รับรายการสภาพแวดล้อม
ผู้ใช้ระบบคลาวด์สาธารณะ:
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" ]
รับรายการโฮสต์เสมือนในสภาพแวดล้อม
ผู้ใช้ระบบคลาวด์สาธารณะ:
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" ]
ดูคำจำกัดความของโฮสต์เสมือนแต่ละรายการในสภาพแวดล้อม
ผู้ใช้ระบบคลาวด์สาธารณะ:
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" : [ ] }
ในตัวอย่างนี้ คุณจะเห็นได้ว่าโฮสต์เสมือน
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
รายการ