คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP 502 Bad Gateway
ที่มีข้อผิดพลาด
protocol.http.ResponseWithBody
เป็นการตอบกลับสำหรับการเรียก API
ข้อความแสดงข้อผิดพลาด
แอปพลิเคชันไคลเอ็นต์ได้รับโค้ดตอบกลับต่อไปนี้
HTTP/1.1 502 Bad Gateway
นอกจากนี้ คุณอาจสังเกตเห็นข้อความแสดงข้อผิดพลาดข้อความใดข้อความหนึ่งต่อไปนี้
{ "fault":{ "faultstring":"Received 204 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
{ "fault":{ "faultstring":"Received 205 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
สาเหตุที่เป็นไปได้
ข้อผิดพลาดนี้เกิดขึ้นหากการตอบสนอง HTTP จากเซิร์ฟเวอร์แบ็กเอนด์ไปยัง Apigee Edge เป็น
204 No Content
หรือ 205 Reset Content
แต่มีการตอบกลับ
เนื้อหา และ/หรือส่วนหัวต่อไปนี้อย่างน้อย 1 ส่วนหัว
Content-Length
Content-Encoding
Transfer-Encoding
ตามข้อกำหนด
RFC 7231 ส่วน 6.3.5: 204 ไม่มีเนื้อหา และ
RFC 7231 ส่วน 6.3.6: 205 รีเซ็ตเนื้อหา ไม่ควรมีเนื้อหาเพิ่มเติม
ควรส่งเป็นส่วนหนึ่งของเนื้อหาเพย์โหลดการตอบกลับที่มีรหัสสถานะ 204 No
Content
หรือ 205 Reset Content
โดยเซิร์ฟเวอร์ต้นทาง ส่วนหัวการตอบกลับ
เช่น Content-Length
, Content-Encoding
หรือ
Transfer-Encoding
ระบุขนาด ประเภท หรือรูปแบบของเพย์โหลดการตอบกลับ
ดังนั้น Apigee Edge จะแสดงรหัสสถานะ 502 Bad Gateway
ที่มี
รหัสข้อผิดพลาด protocol.http.ResponseWithBody
ไปยังไคลเอ็นต์ภายใต้
สถานการณ์:
รหัสสถานะจากเซิร์ฟเวอร์แบ็กเอนด์ | ||
---|---|---|
การตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์ประกอบด้วย | 204 ไม่มีเนื้อหา | 205 รีเซ็ตเนื้อหา |
เนื้อหาการตอบกลับ | ข้อผิดพลาด | ข้อผิดพลาด |
ส่วนหัว (ตั้งค่าเป็นไม่ใช่ 0) |
ข้อผิดพลาด | ข้อผิดพลาด |
(ตั้งค่าเป็น การเข้ารหัสที่รองรับใน Apigee Edge) |
ข้อผิดพลาด | ไม่มีข้อผิดพลาด |
Transfer-Encoding |
ข้อผิดพลาด | ข้อผิดพลาด |
สาเหตุที่เป็นไปได้สำหรับข้อผิดพลาดนี้มีดังนี้
สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาสำหรับ |
---|---|---|
เนื้อหาการตอบกลับหรือส่วนหัวที่มีการตอบกลับ 204 จากเซิร์ฟเวอร์แบ็กเอนด์ | เซิร์ฟเวอร์แบ็กเอนด์จะส่ง 204 No Content หรือ 205 Reset Content
การตอบกลับที่มีเนื้อหาการตอบกลับและ/หรือส่วนหัว Content-Type อย่างน้อย 1 รายการ
Content-Encoding หรือ Transfer-Encoding |
ผู้ใช้ Edge สาธารณะและ Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้การตรวจสอบ API
- ลงชื่อเข้าใช้ Apigee Edge UI ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนเป็นองค์กรที่ต้องการตรวจสอบปัญหา
- ไปที่ วิเคราะห์ > การตรวจสอบ API > หน้าตรวจสอบ
- เลือกกรอบเวลาที่คุณพบข้อผิดพลาด
- พล็อตรหัสข้อผิดพลาดเทียบกับเวลา
เลือกเซลล์ที่มีรหัสข้อผิดพลาด
protocol.http.ResponseWithBody
เป็น แสดงอยู่ด้านล่างคุณจะเห็นข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
protocol.http.ResponseWithBody
ตามที่แสดงด้านล่าง:คลิก ดูบันทึก และขยายแถวสำหรับคำขอที่ล้มเหลว
- จากหน้าต่าง Logs ให้จดรายละเอียดต่อไปนี้
- รหัสสถานะ:
502
- แหล่งที่มาของข้อผิดพลาด:
target
- รหัสข้อผิดพลาด:
protocol.http.ResponseWithBody
- รหัสสถานะ:
- หากแหล่งที่มาของข้อผิดพลาดมีค่า
target
และข้อผิดพลาด Code มีค่าprotocol.http.ResponseWithBody
ซึ่งเท่ากับว่า ระบุว่าเกิดข้อผิดพลาดขึ้นเนื่องจากเซิร์ฟเวอร์แบ็กเอนด์ส่ง รหัสสถานะ204 No Content
หรือ205 Reset Content
กับ เนื้อหาการตอบกลับและ/หรือส่วนหัวอย่างใดอย่างหนึ่งที่กล่าวถึงใน สาเหตุที่เป็นไปได้
เครื่องมือการติดตาม
วิธีวินิจฉัยข้อผิดพลาดโดยใช้เครื่องมือติดตาม
- เปิดใช้เซสชันการติดตาม
และเลือกระหว่าง
- รอให้เกิดข้อผิดพลาด
502 Bad Gateway
หรือ - หากคุณทำให้เกิดปัญหาซ้ำได้ ให้เรียก API และทำให้เกิดข้อผิดพลาด
502 Bad Gateway
ซ้ำ
- รอให้เกิดข้อผิดพลาด
ตรวจสอบว่าเปิดใช้แสดง FlowInfo ทั้งหมด แล้ว
- เลือกคำขอที่ไม่สำเร็จรายการหนึ่งและตรวจสอบการติดตาม
- ไปยังส่วนต่างๆ ของการติดตามและค้นหาตำแหน่งที่ล้มเหลว เกิดขึ้น
โดยทั่วไปแล้ว คุณจะพบข้อผิดพลาดในข้อผิดพลาด
flowinfo
หลังช่วงส่งคำขอไปยังเซิร์ฟเวอร์เป้าหมายดังที่แสดงด้านล่างสถานการณ์ที่ 1
สถานการณ์ที่ 1: เซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วยรหัสสถานะ
204 No Content
ที่มีเนื้อหาการตอบกลับและ/หรือส่วนหัวอย่างใดอย่างหนึ่งที่แสดงอยู่ใน สาเหตุที่เป็นไปได้สังเกตค่าต่อไปนี้จากการติดตาม
- ข้อผิดพลาด:
Received 204 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
สถานการณ์ที่ 2
สถานการณ์ที่ 2: เซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วยรหัสสถานะ
204 No Content
ซึ่งมีเนื้อหาการตอบกลับและ/หรือหนึ่งใน ส่วนหัวที่ระบุไว้ในสาเหตุที่เป็นไปได้สังเกตค่าต่อไปนี้จากการติดตาม
- ข้อผิดพลาด:
Received 205 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
- ข้อผิดพลาด:
- ไปยังช่วง AX (Analytics Data Recorded) ในการติดตาม แล้วคลิกที่ตัวเลือก
เลื่อนลงไปที่ส่วนรายละเอียดระยะ ส่วนหัวของข้อผิดพลาด และ ระบุค่าของ X-Apigee-fault-code และ X-Apigee-fault-source ดังที่แสดงด้านล่าง
- โปรดทราบว่าค่าของ X-Apigee-fault-code และ X-Apigee-fault-source
are protocol.http.ResponseWithBody
และtarget
ตามลำดับ ซึ่งหมายความว่าข้อผิดพลาดเกิดขึ้นเนื่องจากเซิร์ฟเวอร์แบ็กเอนด์ส่ง รหัสสถานะ204 No Content
หรือ205 Reset Content
ที่มี เนื้อหาการตอบกลับและ/หรือส่วนหัวอย่างใดอย่างหนึ่งที่กล่าวถึงในสาเหตุที่เป็นไปได้ข้อผิดพลาด ค่า X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
NGINX
วิธีวินิจฉัยข้อผิดพลาดโดยใช้บันทึกการเข้าถึง NGINX
- หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถใช้บันทึกการเข้าถึง NGINX เพื่อ
ระบุข้อมูลสำคัญเกี่ยวกับ HTTP
502 Bad Gateway
ตรวจสอบบันทึกการเข้าถึง NGINX ดังต่อไปนี้
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
ที่ไหน: ระบบจะแทนที่ ORG, ENV และ PORT# ด้วยค่าจริง
- ค้นหาว่ามีข้อผิดพลาด
502
ที่มีรหัสข้อผิดพลาดไหมprotocol.http.ResponseWithBody
ในช่วงระยะเวลาหนึ่ง (หากเคยมีปัญหาเกิดขึ้นในอดีต) หรือหากมีคำขอที่ยังคงดำเนินการไม่สำเร็จ502
หากคุณพบข้อผิดพลาด
502
ที่มี X-Apigee-fault-code ตรงกับค่าของprotocol.http.ResponseWithBody
แล้วหา ค่าของ X-Apigee-fault-sourceตัวอย่างข้อผิดพลาด 502 จากบันทึกการเข้าถึง NGINX
ตัวอย่างรายการข้างต้นจากบันทึกการเข้าถึง NGINX มีค่าต่อไปนี้สำหรับ X- Apigee-fault-code และ X-Apigee-fault-source ดังนี้
ส่วนหัวการตอบกลับ ค่า X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
- โปรดทราบว่าค่าของ X-Apigee-fault-code และ X-Apigee-fault-source
คือ
protocol.http.ResponseWithBody
และtarget
ตามลำดับ ซึ่งหมายความว่าข้อผิดพลาดเกิดขึ้นเนื่องจากเซิร์ฟเวอร์แบ็กเอนด์ส่ง รหัสสถานะ204 No Content
หรือ205 Reset Content
ที่มี เนื้อหาการตอบกลับและ/หรือส่วนหัวอย่างใดอย่างหนึ่งที่กล่าวถึงในสาเหตุที่เป็นไปได้
สาเหตุ: เนื้อหาการตอบกลับหรือส่วนหัวที่มีการตอบกลับ 204 จากเซิร์ฟเวอร์แบ็กเอนด์
การวินิจฉัย
- กำหนดรหัสข้อผิดพลาดและแหล่งที่มาของข้อผิดพลาดสำหรับข้อผิดพลาดที่พบโดยใช้ API การตรวจสอบ เครื่องมือการติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป
- หาก Fault Code คือ
protocol.http.ResponseWithBody
และ แหล่งที่มาของข้อผิดพลาดมีค่าtarget
ซึ่งจะบ่งบอกว่าแบ็กเอนด์ เซิร์ฟเวอร์ตอบกลับด้วยสถานะ204 No Content
หรือ205 Reset Content
ซึ่งมีเนื้อหาการตอบกลับและ/หรือส่วนหัวอย่างใดอย่างหนึ่งที่กล่าวถึงใน สาเหตุที่เป็นไปได้ เพื่อตรวจสอบว่าเซิร์ฟเวอร์แบ็กเอนด์ได้ส่งเนื้อหาเพย์โหลดการตอบกลับจริงหรือไม่ และ/หรือ ส่วนหัวที่ระบุอยู่ในสาเหตุที่เป็นไปได้ขึ้นไป คุณสามารถ ให้ทำตามขั้นตอนต่อไปนี้
หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะและสามารถส่งคำขอ API เดียวกันไปยัง เซิร์ฟเวอร์แบ็กเอนด์ได้โดยตรงจากระบบของคุณ
- หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถส่งคำขอ API เดียวกันไปยัง เซิร์ฟเวอร์ส่วนหลังโดยตรงจากหนึ่งในโปรเซสเซอร์ข้อความที่เชื่อมโยงกับ การจัดระเบียบและสภาพแวดล้อมที่พบความล้มเหลว
ตรวจสอบการตอบกลับที่ได้รับจากเซิร์ฟเวอร์แบ็กเอนด์ และยืนยันว่าเซิร์ฟเวอร์มี เนื้อหาเพย์โหลดการตอบกลับและ/หรือส่วนหัวที่กล่าวข้างต้นอย่างน้อย 1 รายการ ถ้าใช่ นั่นคือ สาเหตุของข้อผิดพลาดนี้
ตัวอย่าง #1
ตัวอย่างที่ 1: การตอบกลับของเซิร์ฟเวอร์แบ็กเอนด์ 204 ที่มีส่วนหัวการเข้ารหัสเนื้อหา
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Encoding: gzip
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveในตัวอย่างนี้ เซิร์ฟเวอร์แบ็กเอนด์ตอบสนองด้วย รหัสสถานะ
204 No Content
และContent-Encoding: gzip
ตัวอย่าง #2
ตัวอย่างที่ 2: การตอบกลับของเซิร์ฟเวอร์แบ็กเอนด์ 204 ที่มีส่วนหัว Content-Length
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Length: 48
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveในตัวอย่างนี้ เซิร์ฟเวอร์แบ็กเอนด์ตอบสนองด้วย รหัสสถานะ
204 No Content
และContent-Length: 48
ตัวอย่าง #3
ตัวอย่างที่ 3: การตอบกลับของเซิร์ฟเวอร์แบ็กเอนด์ 205 ที่มีเนื้อหาการตอบกลับ
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 205 Reset Content < Date: Sat, 31 Jul 2021 17:14:09 GMT < Content-Length: 12 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host X.X.X.X left intact
This is a sample Response
ในตัวอย่างนี้ เซิร์ฟเวอร์แบ็กเอนด์ตอบสนองด้วย รหัสสถานะ
205 Reset Content
ที่มีเนื้อหาการตอบกลับ วันที่This is a sample Response.
- ในตัวอย่างข้างต้นทั้งหมด เซิร์ฟเวอร์แบ็กเอนด์ได้ส่ง
204 No Content
หรือ รหัสสถานะ205 Reset Content
ที่มีเนื้อหาการตอบกลับและ/หรือส่วนหัวอันใดอันหนึ่ง ที่กล่าวถึงในสาเหตุที่เป็นไปได้ - ดังนั้น Apigee Edge ได้ส่งรหัสสถานะ
502 Bad Gateway
ที่มีรหัสข้อผิดพลาดprotocol.http.ResponseWithBody
ความละเอียด
ตรวจสอบว่าเซิร์ฟเวอร์แบ็กเอนด์เป็นไปตาม Specification เสมอ
RFC 7231 ส่วนที่ 6.3.6: 205 รีเซ็ตเนื้อหา เมื่อส่ง 204 No Content
หรือ 205 Reset Content
ตอบกลับ Apigee Edge กล่าวคือ เซิร์ฟเวอร์แบ็กเอนด์
ต้องไม่ส่งรายการต่อไปนี้เป็นส่วนหนึ่งของ 204 No Content
หรือ
205 Reset Content
คำตอบ:
- เนื้อหาเพย์โหลดการตอบกลับ
- และส่วนหัวต่อไปนี้
Content-Length
Content-Encoding
Transfer-Encoding
ข้อมูลจำเพาะ
Apigee Edge ตอบกลับด้วยรหัสสถานะ 502 Bad Gateway
และรหัสข้อผิดพลาด
protocol.http.ResponseWithBody
หากเซิร์ฟเวอร์แบ็กเอนด์ส่ง
คำตอบ 204 No Content
หรือ 205 Reset Content
แต่
ไม่เป็นไปตามข้อกำหนด RFC ต่อไปนี้
ข้อมูลจำเพาะ |
---|
RFC 7231 ส่วน 6.3.5: 204 ไม่มีเนื้อหา |
RFC 7231 ส่วน 6.3.6: 205 รีเซ็ตเนื้อหา |
สิ่งสำคัญที่ควรทราบ
วิธีแก้ไขที่แนะนำคือให้แก้ไขเซิร์ฟเวอร์แบ็กเอนด์เพื่อส่ง 204 No Content
และรหัสสถานะ 205 Reset Content
โดยไม่มีเนื้อหาการตอบกลับและ
ส่วนหัว - Content-Length
, Content-Encoding
และ
Transfer-Encoding
และปฏิบัติตามข้อกำหนดเฉพาะ
RFC 7231 ส่วน 6.3.5: 204 ไม่มีเนื้อหา และ
RFC 7231, ส่วน 6.3.6: 205 รีเซ็ตเนื้อหา
หากยังต้องการความช่วยเหลือจากทีมสนับสนุนของ Apigee ให้ไปที่ ต้องรวบรวมข้อมูลการวินิจฉัย
ต้องรวบรวมข้อมูลการวินิจฉัย
รวบรวมข้อมูลการวินิจฉัยต่อไปนี้ จากนั้นให้ติดต่อทีมสนับสนุนของ Apigee Edge
หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ โปรดระบุข้อมูลต่อไปนี้
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- ชื่อพร็อกซี API
- ทำตามคำสั่ง
curl
ในการสร้างข้อผิดพลาด502
ซ้ำ - ไฟล์การติดตามสำหรับคำขอ API
หากคุณเป็นผู้ใช้ Private Cloud ให้ระบุข้อมูลต่อไปนี้
- พบข้อความแสดงข้อผิดพลาดทั้งหมดสำหรับคำขอที่ล้มเหลว
- ชื่อสภาพแวดล้อม
- แพ็กเกจพร็อกซี API
- ไฟล์การติดตามสำหรับคำขอ API
บันทึกการเข้าถึง NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
ที่ไหน: ORG, ENV และ PORT# จะถูกแทนที่ด้วย มูลค่าจริง
- บันทึกระบบของผู้ประมวลผลข้อความ
/opt/apigee/var/log/edge-message-processor/logs/system.log