คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP 404
พร้อมข้อความ
Not Found
และข้อความแสดงข้อผิดพลาด
Unable to identify proxy for host: VIRTUAL_HOST and url: PATH
ในการตอบกลับการเรียก API
ข้อผิดพลาดนี้หมายความว่า Edge ไม่พบพร็อกซี API สำหรับโฮสต์และเส้นทางเสมือนที่ระบุ
ข้อความแสดงข้อผิดพลาด
คุณจะได้รับรหัสสถานะ HTTP ต่อไปนี้
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 ไม่พบพร็อกซี API สำหรับ
โฮสต์เสมือน default
และเส้นทาง /oauth2/token
สาเหตุที่เป็นไปได้
สาเหตุบางส่วนที่เป็นไปได้สำหรับข้อผิดพลาดนี้มีดังนี้
สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาสำหรับ |
---|---|---|
พร็อกซี API ไม่เชื่อมโยงกับโฮสต์เสมือนที่ระบุ | ไม่ได้กำหนดค่าพร็อกซี API ที่ระบุให้ยอมรับคำขอบนโฮสต์เสมือน ที่ระบุในข้อความแสดงข้อผิดพลาด | ผู้ใช้ Edge สาธารณะและ Private Cloud |
นำโฮสต์เสมือนออกในการแก้ไขพร็อกซี API ที่ทำให้ใช้งานได้ใหม่ | การนำโฮสต์เสมือนออกจากการแก้ไขที่ทำให้ใช้งานได้ใหม่ขณะที่ไคลเอ็นต์ยังอยู่ การใช้โฮสต์เสมือนที่เฉพาะเจาะจงอาจทำให้เกิดปัญหานี้ได้ | ผู้ใช้ Edge สาธารณะและ Private Cloud |
เส้นทางไม่ได้เชื่อมโยงกับพร็อกซี API | ไม่ได้กำหนดค่าพร็อกซี API ที่ระบุให้ยอมรับคำขอในเส้นทางที่ระบุ ในข้อความแสดงข้อผิดพลาด | ผู้ใช้ Edge สาธารณะและ Private Cloud |
ไม่ได้ทำให้พร็อกซี API ใช้งานได้ในสภาพแวดล้อม | พร็อกซี API ที่ระบุจะไม่ใช้งานได้ในสภาพแวดล้อมที่คุณใช้ เพื่อพยายามส่งคำขอ API | ผู้ใช้ Edge สาธารณะและ Private Cloud |
ระบบไม่โหลดสภาพแวดล้อมในตัวประมวลผลข้อความ | สภาพแวดล้อมที่เฉพาะเจาะจง (ที่คุณพยายามสร้างคำขอ API) โหลดในตัวประมวลผลข้อความเนื่องจากเกิดข้อผิดพลาด | ผู้ใช้ Edge Private Cloud |
ไม่ได้ทำให้พร็อกซี API ใช้งานได้ในตัวประมวลผลข้อความอย่างน้อย 1 รายการ | พร็อกซี API อาจไม่สามารถใช้งานได้กับ Message Processor อย่างน้อยหนึ่งรายการเนื่องจากไม่มี การแจ้งเตือนกิจกรรมในระหว่างการทำให้ใช้งานได้ | ผู้ใช้ 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
สาเหตุ: พร็อกซี API ไม่เชื่อมโยงกับโฮสต์เสมือนที่ระบุ
ถ้าไม่มีการกำหนดค่าพร็อกซี API ให้ยอมรับคำขอสำหรับโฮสต์เสมือนเฉพาะ จากนั้น
เราจะได้รับการตอบกลับ 404 Not Found
พร้อมข้อความแสดงข้อผิดพลาด
วันที่ Unable to identify proxy for host: VIRTUAL_HOST and url: PATH.
การวินิจฉัย
- ตรวจสอบการกำหนดค่าปลายทางของพร็อกซีสำหรับพร็อกซี API และดูว่าพร็อกซี API
มีการกำหนดค่าให้ยอมรับคำขอสำหรับโฮสต์เสมือนที่ระบุในข้อผิดพลาด นี่คือ
ระบุโดยองค์ประกอบ
VirtualHost
มาดูตัวอย่างProxyEndpoint
กัน การกำหนดค่าเพื่อให้เข้าใจเรื่องนี้ตัวอย่างการกำหนดค่าปลายทางของพร็อกซีที่แสดงให้เห็นว่าพร็อกซี API ยอมรับคำขอใน โฮสต์เสมือนที่ปลอดภัย
- สมมติว่ามีการกำหนดโฮสต์เสมือนในสภาพแวดล้อมที่เฉพาะเจาะจงดังนี้
ชื่อ พอร์ต ชื่อแทนโฮสต์ default
80
myorg-prod.apigee.net
secure
443
myorg-prod.apigee.net
- คุณส่งคำขอ API ไปยัง
VirtualHost
ของdefault
โดยใช้ URLhttp://myorg-prod.apigee.net/weather
- เนื่องจาก
ProxyEndpoint
ไม่มีdefault
VirtualHost
ตามที่แสดงใน ตัวอย่างด้านบน คุณจะได้รับโค้ดตอบกลับ404
พร้อมข้อความแสดงข้อผิดพลาดต่อไปนี้{"fault":{"faultstring":"Unable to identify proxy for host: default and url: \/weather","detail":{"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"}}}
- ไปที่ส่วนการแก้ปัญหาด้านล่างเพื่อแก้ไขปัญหานี้
- หากมีการกำหนดค่าให้
ProxyEndpoint
ยอมรับคำขอในdefault
VirtualHost
ไปที่สาเหตุถัดไป - เส้นทางไม่ได้เชื่อมโยงกับพร็อกซี API
ความละเอียด
- เพิ่ม
VirtualHost
ที่ขาดหายไปในการกำหนดค่าProxyEndpoint
เพื่อ แก้ไขปัญหา สำหรับตัวอย่างที่แสดงด้านบน คุณสามารถเพิ่มVirtualHost
เริ่มต้น เป็นการกำหนดค่าProxyEndpoint
ดังนี้<VirtualHost>default</VirtualHost>
ตัวอย่างการกำหนดค่าปลายทางพร็อกซีที่แสดงค่าเริ่มต้น> VirtualHost> เพิ่มเข้ามา
- หรือในตัวอย่างที่อ้างถึงข้างต้น หากคุณตั้งใจที่จะใช้เฉพาะ
secure
VirtualHost
สำหรับพร็อกซี API ที่เฉพาะเจาะจงนี้ แล้วสร้างคำขอ API ไปยังsecure
VirtualHost
เท่านั้นโดยใช้โปรโตคอล HTTPS:https://myorg-prod.apigee.net/weather
สาเหตุ: โฮสต์เสมือนถูกนำออกในการแก้ไขพร็อกซี API ที่ทำให้ใช้งานได้ใหม่
ถ้ามีการทำให้พร็อกซี API ใหม่ใช้งานได้หลังจากนำโฮสต์เสมือนที่ระบุออก (ซึ่งเป็นส่วนหนึ่งของการแก้ไขที่ทำให้ใช้งานได้ก่อนหน้านี้) ที่ลูกค้ายังคงใช้งานอยู่ ส่งคำขอ API มา ก็อาจทำให้เกิดปัญหานี้ได้
การวินิจฉัย
- ตรวจสอบการกำหนดค่าปลายทางของพร็อกซีสำหรับพร็อกซี API เพื่อดูว่าพร็อกซี API มี
มีการกำหนดค่าให้ยอมรับคำขอสำหรับโฮสต์เสมือนที่ระบุในข้อผิดพลาด นี่คือ
ระบุโดยองค์ประกอบ
VirtualHost
ในการกำหนดค่าProxyEndpoint
- หากไม่มีโฮสต์เสมือนที่ระบุในข้อผิดพลาดใน
ProxyEndpoint
การกำหนดค่า จากนั้นดำเนินการตามขั้นตอนต่อไปนี้ หรือไปที่สาเหตุถัดไป - เส้นทางไม่เชื่อมโยงกับพร็อกซี API ใดๆ - เปรียบเทียบการกำหนดค่า
ProxyEndpoint
ของการแก้ไขที่ทำให้ใช้งานได้ก่อนหน้านี้กับการกำหนดค่าปัจจุบัน การแก้ไขที่ทำให้ใช้งานได้- ตัวอย่างเช่น สมมติว่าการแก้ไขที่ทำให้ใช้งานได้ก่อนหน้านี้คือ
5
และ การแก้ไขที่ทำให้ใช้งานได้ในปัจจุบันคือ6
:- โฮสต์เสมือนที่กำหนดค่าไว้ในปลายทางของพร็อกซีในการแก้ไข 5
<HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> <VirtualHost>vh1</VirtualHost> </HTTPProxyConnection>
- โฮสต์เสมือนที่กำหนดค่าไว้ในปลายทางของพร็อกซีในการแก้ไขที่ 6
<HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> <VirtualHost>secure</VirtualHost> </HTTPProxyConnection>
- ตัวอย่างเช่น สมมติว่าการแก้ไขที่ทำให้ใช้งานได้ก่อนหน้านี้คือ
- ในตัวอย่างด้านบน
VirtualHost vh1
มีอยู่ในrevision 5,
แต่นำออกจากrevision 6
และแทนที่ด้วยVirtualHost secure
- ดังนั้นหากคุณหรือไคลเอ็นต์ของคุณส่งคำขอไปยังพร็อกซี API โดยใช้
VirtualHost vh1
(ซึ่งเป็นส่วนหนึ่งของrevision 5
) คุณจะได้รับ รหัสตอบกลับ404
ที่มีข้อความแสดงข้อผิดพลาดต่อไปนี้{"fault":{"faultstring":"Unable to identify proxy for host: vh1 and url: \/weather","detail":{"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"}}}
ความละเอียด
หากคุณระบุว่าโฮสต์เสมือนหรือโฮสต์ถูกนำออกในการแก้ไขใหม่ แสดงว่าอาจเป็นโดยเจตนาหรือ อุบัติเหตุ สำหรับแต่ละกรณี ให้ดำเนินการแก้ปัญหา/ขั้นตอนที่แนะนำต่อไปนี้เพื่อแก้ไขปัญหา
สถานการณ์ที่ 1: การเปลี่ยนแปลงโดยเจตนา
ในกรณีที่การนำโฮสต์เสมือนออกโดยตั้งใจ คุณสามารถเลือกรายการใดรายการหนึ่งต่อไปนี้ ตัวเลือกที่ 1 เป็นวิธีที่แนะนำ
- สร้างพร็อกซีใหม่ที่มีเส้นทางฐานอื่นและใช้โฮสต์เสมือนอื่น (ที่ไม่มีอยู่ในการแก้ไขที่ทำให้ใช้งานได้ก่อนหน้านี้)
-
หากต้องการใช้พร็อกซี API ที่มีอยู่ต่อไป แต่ใช้โฮสต์เสมือนอื่น จึงควรเก็บโฮสต์เสมือนที่มีอยู่ไว้ และเพิ่มโฮสต์เสมือนเพิ่มเติม
ซึ่งจะช่วยให้ผู้ใช้พร็อกซี API นี้ไม่ได้รับผลกระทบจากการเปลี่ยนแปลง
หากคุณต้องการใช้พร็อกซี API ที่มีอยู่และมีเพียงโฮสต์เสมือนอื่นเท่านั้น ให้ทำดังนี้ แจ้งให้ผู้ใช้ทราบล่วงหน้าและทำการเปลี่ยนแปลงนี้ในระหว่างการบำรุงรักษา
ซึ่งจะช่วยให้ผู้ใช้พร็อกซี API นี้ทราบถึงการเปลี่ยนแปลง และ สามารถใช้โฮสต์เสมือนอื่นในการเรียกไปยังพร็อกซี API นี้ ดังนั้น จะไม่ได้รับผลกระทบจากการเปลี่ยนแปลง
สถานการณ์ที่ 2: การเปลี่ยนแปลงโดยไม่ได้ตั้งใจ
ในกรณีที่การนำโฮสต์เสมือนออกเกิดจากความผิดพลาดและไม่ได้ตั้งใจ ให้ดำเนินการดังนี้
- อัปเดตการกำหนดค่า
ProxyEndpoint
ในการแก้ไขที่ทำให้ใช้งานได้ในปัจจุบันเพื่อใช้ โฮสต์เสมือนเดียวกันกับที่ใช้ในการแก้ไขที่ทำให้ใช้งานได้ก่อนหน้านี้ ใน ข้างต้น ให้เปลี่ยนแปลงส่วนต่อไปนี้จาก<HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> <VirtualHost>secure</VirtualHost> </HTTPProxyConnection>
ถึง
<HTTPProxyConnection> <BasePath>/weather</BasePath> <Properties/> <VirtualHost>vh1</VirtualHost> </HTTPProxyConnection>
- ทำให้การแก้ไขใช้งานได้อีกครั้ง
แนวทางปฏิบัติแนะนำ
ขอแนะนำให้ติดตั้งใช้งานพร็อกซีใหม่หรือการแก้ไขใหม่ในระหว่างการบำรุงรักษาเสมอ หรือเมื่อคาดว่าจะมีการเข้าชมน้อยที่สุด ปัญหาใดๆ ที่เกิดขึ้นระหว่างการทำให้ใช้งานได้ หลีกเลี่ยงหรือส่งผลกระทบต่อการจราจรให้เหลือน้อยที่สุด
สาเหตุ: เส้นทางไม่เชื่อมโยงกับพร็อกซี API ใดๆ
หากไม่มีการกำหนดค่าพร็อกซี API ให้ยอมรับคำขอสำหรับเส้นทางที่เจาะจงซึ่งใช้ใน
URL คำขอ API แล้วเราจะได้รับการตอบกลับ 404 Not Found
พร้อมข้อความแสดงข้อผิดพลาด
วันที่ Unable to identify proxy for host: VIRTUAL_HOST and url: PATH.
การวินิจฉัย
- ดูการกำหนดค่า
ProxyEndpoint
ของพร็อกซี API ที่คุณต้องการ เพื่อสร้างคำขอ API - ตรวจสอบว่าพร็อกซี API มีการกำหนดค่าให้ยอมรับคำขอสำหรับเส้นทางที่ระบุหรือไม่ ในข้อความแสดงข้อผิดพลาด ซึ่งคุณสามารถทำได้โดยทำตามขั้นตอนใน สถานการณ์ที่ 1 และ สถานการณ์ที่ 2
สถานการณ์ที่ 1: เส้นทางไม่ตรงกับเส้นทางฐานของพร็อกซี API
- หาก
path
ที่ระบุในข้อความแสดงข้อผิดพลาดไม่ตรงกับbasepath
ของพร็อกซี API ที่ระบุ หรือไม่ได้เริ่มต้นด้วยbasepath
อาจเป็นสาเหตุของข้อผิดพลาด - ลองดูตัวอย่างเพื่ออธิบายเรื่องนี้
basepath
ของพร็อกซี API ที่ต้องการคือ/weather
- URL คำขอ API คือ
https://myorg-prod.apigee.net/climate
ซึ่งหมายความว่า เส้นทางที่ใช้ใน URL คำขอ API คือ/climate.
- ในตัวอย่างนี้
path
ไม่เหมือนกับbasepath
และ ไม่ได้ขึ้นต้นด้วยbasepath
คุณจึงได้รับข้อผิดพลาดต่อไปนี้{ "fault":{ "faultstring":"Unable to identify proxy for host: secure and url: \/climate", "detail":{ "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound" } } }
ความละเอียด
- ตรวจสอบว่า
path
ที่ใช้ใน URL คำขอ API ตรงกับbasepath
ของพร็อกซี API ที่ระบุ - ในตัวอย่างข้างต้น URL ของคำขอ API ควรเป็นดังนี้
{ https://myorg-prod.apigee.net/weather
สถานการณ์ที่ 2: เส้นทางไม่ตรงกับขั้นตอนแบบมีเงื่อนไขใดๆ ที่ใช้ได้
- หาก
path
ที่ใช้ใน URL คำขอ API ขึ้นต้นด้วยbasepath
ก็เป็นไปได้ว่าpath suffix
(ส่วนที่ตามหลังbasepath
) ที่ระบุในข้อความแสดงข้อผิดพลาดไม่ตรงกับ ซึ่งอาจทำให้เกิดข้อผิดพลาด404
ได้ - ลองดูตัวอย่างเพื่ออธิบายเรื่องนี้
basepath
ของพร็อกซี API ที่ต้องการคือ/weather
- URL คำขอ API คือ
https://myorg-prod.apigee.net/weather/Delhi
ซึ่งหมายความว่า เส้นทางที่ใช้ใน URL คำขอ API คือ/weather/Delhi.
- ในตัวอย่างนี้
path
จะขึ้นต้นด้วยbasepath
/weather
นอกจากนี้ ยังมีpath suffix
เป็น/Delhi
- ตอนนี้ให้ตรวจสอบว่ามีขั้นตอนแบบมีเงื่อนไขหรือไม่ใน
ProxyEndpoint
- หากไม่มีขั้นตอนแบบมีเงื่อนไขหรือมีขั้นตอนที่ไม่มีเงื่อนไข 2-3 รายการ ให้ไปที่ สาเหตุถัดไป - ไม่ได้ทำให้พร็อกซี API ใช้งานได้ในสภาพแวดล้อม
- หาก
ProxyEndpoint
มีเฉพาะขั้นตอนแบบมีเงื่อนไข ให้ตรวจสอบรายการต่อไปนี้- หากเงื่อนไขในขั้นตอนแบบมีเงื่อนไขทั้งหมดตรวจหา
proxy.pathsuffix
ที่เจาะจง (เส้นทางที่อยู่หลังเส้นทางฐาน) - และหาก
path suffix
ที่ระบุใน URL ของคำขอ API ไม่ตรงกับ เงื่อนไขอื่นๆ อยู่เสมอ นั่นจึงเป็นสาเหตุของข้อผิดพลาด
- หากเงื่อนไขในขั้นตอนแบบมีเงื่อนไขทั้งหมดตรวจหา
- สมมติว่าเรามีสองขั้นตอนใน
ProxyEndpoint
และขั้นตอนทั้งคู่ ขั้นตอนแบบมีเงื่อนไขดังที่แสดงด้านล่าง วันที่<Condition>(proxy.pathsuffix MatchesPath "/Bangalore") and (request.verb = "GET")</Condition> <Condition>(proxy.pathsuffix MatchesPath "/Chennai") and (request.verb = "GET")</Condition>
- ในตัวอย่างที่แสดงด้านบน เรามีขั้นตอนแบบมีเงื่อนไข 2 ขั้นตอน โดยขั้นตอนหนึ่งตรงกับ
proxy.pathsuffix
(เส้นทางที่อยู่หลังเส้นทางฐาน) ไปยัง/Bangalore
และ และอีกกลุ่มหนึ่งตรงกับ/Chennai
แต่ไม่มีรายการใดที่ตรงกับ/Delhi
ซึ่งเป็นpath suffix
ที่ส่งผ่านใน URL คำขอ API - นี่คือสาเหตุของข้อผิดพลาด
404
ดังนั้นคุณจะได้รับข้อผิดพลาดต่อไปนี้{ "fault":{ "faultstring":"Unable to identify proxy for host: secure and url: \/weather\/Delhi", "detail":{ "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound" } } }
- ในตัวอย่างที่แสดงด้านบน เรามีขั้นตอนแบบมีเงื่อนไข 2 ขั้นตอน โดยขั้นตอนหนึ่งตรงกับ
ความละเอียด
- ตรวจสอบว่า
path suffix
ตรงกับขั้นตอนแบบมีเงื่อนไขอย่างน้อย 1 รายการในปลายทางของพร็อกซี - ในตัวอย่างด้านบน คุณสามารถใช้วิธีต่อไปนี้เพื่อแก้ไขข้อผิดพลาด
- หากคุณต้องการใช้งานชุดนโยบายที่เฉพาะเจาะจงสำหรับเส้นทาง
/Delhi
ให้เพิ่มขั้นตอนแยกต่างหากพร้อมด้วยชุดนโยบายที่จำเป็น และตรวจสอบว่ามีเงื่อนไข ที่ตรงกับ/Delhi
/proxy.pathsuffix
ตามที่แสดงด้านล่าง:<Condition>(proxy.pathsuffix MatchesPath "/Delhi") and (request.verb = "GET")</Condition>
- หากคุณต้องการใช้ชุดนโยบายทั่วไปสำหรับเส้นทาง
/Delhi
ให้ไปที่ ขั้นตอนทั่วไป ตรวจสอบว่ามีเงื่อนไขที่ช่วยให้/proxy.pathsuffix
กล่าวคือ จะอนุญาตให้เส้นทางใดก็ได้หลังจากbasepath
/weather
ตามที่แสดงด้านล่าง:<Condition>(proxy.pathsuffix MatchesPath "/**") and (request.verb = "GET")</Condition>
- หากคุณต้องการใช้งานชุดนโยบายที่เฉพาะเจาะจงสำหรับเส้นทาง
หาก ProxyEndpoint
มี basepath
และ path suffix
ที่ถูกต้องที่ระบุไว้ใน URL ของ API
ตรงกับขั้นตอนแบบมีเงื่อนไขรายการใดรายการหนึ่ง แล้วย้ายไปที่สาเหตุถัดไป
ไม่ได้ทำให้พร็อกซี API ใช้งานได้ในสภาพแวดล้อม
สาเหตุ: พร็อกซี API ไม่ทำงานในสภาพแวดล้อม
การวินิจฉัย
- กำหนดสภาพแวดล้อมที่มีชื่อแทนโฮสต์ที่ใช้ใน URL คำขอ API ของคุณ
ซึ่งทำได้โดยตรวจสอบรายละเอียดของโฮสต์เสมือนทั้งหมดในแต่ละสภาพแวดล้อม
องค์กรของคุณใน Edge UI
ตัวอย่างเช่น สมมติว่ามีการกำหนดค่าต่อไปนี้
- ถ้า
http://myorg-prod.apigee.net/weather
คือ URL ของคุณ จากนั้นmyorg-prod.apigee.net
คือชื่อแทนของโฮสต์ - ชื่อแทนโฮสต์
myorg-prod.apigee.net
มีการกำหนดค่าเป็นส่วนหนึ่งของ โฮสต์เสมือนในสภาพแวดล้อมprod
ขององค์กร
- ถ้า
- ตรวจสอบว่ามีการทำให้พร็อกซี API ใช้งานได้ในสภาพแวดล้อมที่ระบุใน ขั้นตอนที่ 1 ด้านบน
- ถ้าไม่มีการทำให้พร็อกซี API ใช้งานได้ในสภาพแวดล้อมที่เฉพาะเจาะจง นี่จึงเป็นสาเหตุที่
ข้อผิดพลาด
404
- ในตัวอย่างที่ใช้ในขั้นตอนที่ 1 ด้านบน สมมติว่าไม่ได้ติดตั้งใช้งานพร็อกซี API ใน
prod
ดังนั้นนี่คือสาเหตุของข้อผิดพลาด - ไปที่ส่วนการแก้ปัญหาด้านล่าง
- ในตัวอย่างที่ใช้ในขั้นตอนที่ 1 ด้านบน สมมติว่าไม่ได้ติดตั้งใช้งานพร็อกซี API ใน
- หากระบบทำให้พร็อกซี API ใช้งานได้ในสภาพแวดล้อมที่เฉพาะเจาะจง ให้ไปที่สาเหตุถัดไป ระบบไม่โหลดสภาพแวดล้อมบน Message Processor
ความละเอียด
ทำให้พร็อกซี API ใช้งานได้ในสภาพแวดล้อมที่เฉพาะเจาะจงซึ่งคุณต้องการสร้างคำขอ API
สาเหตุ: ระบบไม่โหลดสภาพแวดล้อมใน Message Processor
การวินิจฉัย
- เข้าสู่ระบบ Message Processor แต่ละเครื่อง และตรวจสอบว่าสภาพแวดล้อมที่คุณใช้
ทำให้คำขอ API โหลดขึ้นใน Message Processor โดยใช้คำสั่งต่อไปนี้
curl -v 0:8082/v1/runtime/organizations/<orgname>/environments
- หากสภาพแวดล้อมที่เฉพาะเจาะจงอยู่ในรายการโดยเป็นส่วนหนึ่งของคำสั่งข้างต้น ให้ไปที่สาเหตุถัดไป ไม่ได้ทำให้พร็อกซี API ใช้งานได้ในตัวประมวลผลข้อความอย่างน้อย 1 รายการ
- หากสภาพแวดล้อมใดไม่อยู่ในรายการ ให้ตรวจสอบ
/opt/apigee/var/log/edge-message-processor/logs/system.log
และ/opt/apigee/var/log/edge-message-processor/logs/startupruntimeerrors.log
ใน ตัวประมวลผลข้อความสำหรับข้อผิดพลาดในระหว่างการโหลดสภาพแวดล้อม - อาจมีข้อผิดพลาดหลายรายการที่อาจทำให้โหลดสภาพแวดล้อมไม่สำเร็จ Message Processor การแก้ไขขึ้นอยู่กับข้อผิดพลาดที่เกิดขึ้น
ความละเอียด
สภาพแวดล้อมอาจไม่โหลดบน Message Processor เนื่องจากสาเหตุหลายประการ ส่วนนี้ แสดงสาเหตุที่เป็นไปได้ 2-3 ข้อที่อาจทำให้เกิดปัญหานี้ และอธิบายวิธีแก้ไข ถึงปัญหา
-
ถ้าคุณพบข้อผิดพลาดอย่างใดอย่างหนึ่งต่อไปนี้ในบันทึกของตัวประมวลผลข้อความ แสดงว่าข้อผิดพลาดนี้เกิดจาก พบปัญหากับใบรับรอง/คีย์ที่เพิ่มลงในคีย์สโตร์/ทรัสต์สโตร์ที่ระบุ ในสภาพแวดล้อมที่ระบุ
ข้อผิดพลาด #1: java.security.KeyStoreException: ไม่สามารถเขียนทับใบรับรองของตนเอง
2018-01-30 12:04:38,248 pool-47-thread-4 ERROR MESSAGING.RUNTIME - AbstractConfigurator.propagateEvent() : Error while handling the update for the Configurator com.apigee.kernel.exceptions.spi.UncheckedException: Failed to add certificate : mycert in key store : mytruststore in environment : test at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:156) ~[config-entities-1.0.0.jar:na] at com.apigee.entities.configurators.KeyStore.handleUpdate(KeyStore.java:101) ~[config-entities-1.0.0.jar:na] at com.apigee.entities.AbstractConfigurator.propagateEvent(AbstractConfigurator.java:85) ~[config-entities-1.0.0.jar:na] at com.apigee.messaging.runtime.Environment.handleUpdate(Environment.java:238) [message-processor-1.0.0.jar:na] … Caused by: java.security.KeyStoreException: Cannot overwrite own certificate at com.sun.crypto.provider.JceKeyStore.engineSetCertificateEntry(JceKeyStore.java:355) ~[sunjce_provider.jar:1.8.0_151] at java.security.KeyStore.setCertificateEntry(KeyStore.java:1201) ~[na:1.8.0_151] at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:153) ~[config-entities-1.0.0.jar:na]
... 20 common frames omitted
2018-01-30 12:04:38,250 pool-47-thread-4 ERROR MESSAGING.RUNTIME - AbstractConfigurator.rollbackTransaction() : Error in processing the changes : Unknown resource type cert
ข้อผิดพลาด #2: java.security.KeyStoreException: เขียนทับรหัสลับไม่ได้
2017-11-01 03:28:47,560 pool-21-thread-7 ERROR MESSAGING.RUNTIME - AbstractConfigurator.propagateEvent() : Error while handling the update for the Configurator com.apigee.kernel.exceptions.spi.UncheckedException: Failed to add certificate : mstore in key store : myTruststore in environment : dev at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:156) ~[config-entities-1.0.0.jar:na] at com.apigee.entities.configurators.KeyStore.handleUpdate(KeyStore.java:101) ~[config-entities-1.0.0.jar:na] ... Caused by: java.security.KeyStoreException: Cannot overwrite secret key at com.sun.crypto.provider.JceKeyStore.engineSetCertificateEntry(JceKeyStore.java:354) ~[sunjce_provider.jar:1.8.0_144] at java.security.KeyStore.setCertificateEntry(KeyStore.java:1201) ~[na:1.8.0_144] at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:153) ~[config-entities-1.0.0.jar:na] ... 20 common frames omitted 2017-11-01 03:28:47,562 pool-21-thread-7 ERROR MESSAGING.RUNTIME - AbstractConfigurator.rollbackTransaction() : Error in processing the changes : Unknown resource type cert
- รับรายละเอียดของคีย์สโตร์/ทรัสต์สโตร์ที่ระบุในข้อความแสดงข้อผิดพลาดที่แสดงใน
ขั้นตอนก่อนหน้านี้โดยใช้การเรียก API การจัดการต่อไปนี้
curl -v "http://<management-IPaddress>:8080/v1/organizations/<org-name>/environments/<env-name>/keystores/myTruststore" -u <user>
ตัวอย่างเอาต์พุต:
{ "certs":[ "mycert", "mycert-new" ], "keys":[ "mycert" ], "name":"myTruststore" }
- เอาต์พุตตัวอย่างแสดงให้เห็นว่ามีใบรับรอง 2 รายการและคีย์ใน Truststore
myTruststore
โดยทั่วไปแล้ว Truststore จะไม่มีคีย์ หากใช่ แสดงว่าเป็น ควรมีใบรับรองเดียวและคีย์เดียว - ดูรายละเอียดเกี่ยวกับใบรับรอง 2 รายการโดยใช้ API ต่อไปนี้
curl -s http://<management-IPaddress>:8080/v1/runtime/organizations/<org-name>/environments/<env-name>/keystores/<keystore-name>/certs/<cert-name>
- ตรวจสอบวันหมดอายุของใบรับรองแต่ละใบและพิจารณาใบรับรองที่หมดอายุ/เก่า
- ลบใบรับรองที่หมดอายุหรือไม่พึงประสงค์ออกจาก Truststore
myTruststore
หากปัญหายังคงอยู่หรือหากคุณพบข้อผิดพลาดอื่นนอกเหนือจากที่กล่าวไว้ในขั้นตอนที่ 1 ด้านบน ให้ไปที่ต้องรวบรวมข้อมูลการวินิจฉัย
สาเหตุ: พร็อกซี API ไม่ทำงาน ติดตั้งใช้งานใน Message Processor อย่างน้อย 1 รายการ
ไม่สามารถใช้พร็อกซี API กับตัวประมวลผลข้อความอย่างน้อยหนึ่งรายการ ปัญหานี้เกิดขึ้นอย่างมาก เกิดขึ้นน้อยมากหรือส่วนใหญ่เกิดจากการไม่มีการแจ้งเตือนกิจกรรมจากเซิร์ฟเวอร์การจัดการ ตัวประมวลผลข้อความระหว่างการทำให้พร็อกซี API ที่ระบุใช้งานได้ ในกรณีนี้ คุณจะ สร้างเซสชันการติดตามใน Edge UI ไม่ได้
การวินิจฉัย
- เข้าสู่โปรเซสเซอร์ข้อความทีละอย่าง และตรวจสอบเพื่อดูว่าการแก้ไข
มีการใช้พร็อกซี API แล้วหรือไม่ใช้คำสั่งต่อไปนี้
curl -v 0:8082/v1/runtime/organizations/<orgname>/environments/<envname>/apis/<apiname>/revisions
- หากการแก้ไขที่เฉพาะเจาะจงของพร็อกซี API ไม่ปรากฏเป็นเอาต์พุตของคำสั่ง ที่กล่าวถึงในขั้นตอนที่ 1 ข้างต้น จากนั้นให้รีสตาร์ทโปรแกรมประมวลผลข้อความตามที่อธิบายไว้ใน การแก้ปัญหา
- ทำซ้ำขั้นตอนที่ 1-2 สำหรับ Message Processor ทั้งหมด
- หากมีการทำให้การแก้ไขที่เฉพาะเจาะจงของพร็อกซี API ใช้งานได้ในโปรแกรม Message Processor ทั้งหมด ให้ทำดังนี้ นี่ไม่ใช่สาเหตุของปัญหานี้ ไปที่ ต้องรวบรวมข้อมูลการวินิจฉัย
ความละเอียด
รีสตาร์ทโปรเซสเซอร์ข้อความเฉพาะที่มีการแก้ไขพร็อกซี API ไม่ได้นำไปใช้
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
วิเคราะห์ปัญหาโดยใช้การตรวจสอบ API
การตรวจสอบ API ช่วยให้คุณสามารถแยกส่วนที่เป็นปัญหาได้อย่างรวดเร็ว เพื่อวินิจฉัยปัญหาเกี่ยวกับข้อผิดพลาด ประสิทธิภาพ และเวลาในการตอบสนอง รวมถึงแหล่งที่มา เช่น แอปของนักพัฒนาซอฟต์แวร์ พร็อกซี API, เป้าหมายแบ็กเอนด์ หรือแพลตฟอร์ม API
สำหรับปัญหานี้ คุณสามารถไปที่ API Monitoring > หน้าตรวจสอบและ เลือกวันที่ พร็อกซี และอื่นๆ ที่เหมาะสม และคุณอาจเห็นรายละเอียดต่อไปนี้:
- รหัสข้อผิดพลาด:
messaging.adaptors.http.flow.ApplicationNotFound
- รหัสสถานะ:
404
- แหล่งที่มาของข้อผิดพลาด:
Apigee
หรือMP
นอกจากนี้ คุณยังคลิกดูบันทึกดังที่แสดงในภาพหน้าจอด้านบน และตรวจสอบต่อไปได้
อธิบายสถานการณ์ตัวอย่างสาธิตวิธีการ
แก้ปัญหา 5xx
รายการเกี่ยวกับ API โดยใช้การตรวจสอบ API ตัวอย่างเช่น คุณอาจ
ต้องการตั้งค่าการแจ้งเตือนเมื่อรหัสสถานะ 404
มีจำนวนเกิน
เกณฑ์ที่เฉพาะเจาะจง
ต้องรวบรวมข้อมูลการวินิจฉัย
ถ้าปัญหายังคงอยู่แม้จะทำตามคำแนะนำด้านบนแล้ว ให้รวบรวม ข้อมูลการวินิจฉัยต่อไปนี้ ติดต่อและแชร์ข้อมูลนี้กับทีมสนับสนุนของ Apigee Edge
- หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ โปรดระบุข้อมูลต่อไปนี้
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- ชื่อพร็อกซี API
- ทำตามคำสั่ง curl ให้เสร็จเพื่อทำให้เกิดข้อผิดพลาดซ้ำ
- หากคุณเป็นผู้ใช้ Private Cloud ให้ระบุข้อมูลต่อไปนี้
- สังเกตข้อความแสดงข้อผิดพลาดทั้งหมด
- ชื่อสภาพแวดล้อม
- แพ็กเกจพร็อกซี API
- บันทึกสำหรับผู้ประมวลผลข้อมูลข้อความ
/opt/apigee/var/log/edge-message-processor/logs/system.log
- เอาต์พุตของคำสั่งต่อไปนี้ในตัวประมวลผลข้อความแต่ละตัว
curl -v 0:8082/v1/runtime/organizations/<orgname>/environments
curl -v 0:8082/v1/runtime/organizations/<orgname>/environments/<envname>/apis/<apiname>/revisions
- รายละเอียดเกี่ยวกับส่วนใน Playbook นี้ที่คุณได้ลองใช้ และข้อมูลเชิงลึกอื่นๆ จะช่วยให้เราติดตามการแก้ปัญหานี้ได้อย่างรวดเร็ว