คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ 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-LengthContent-EncodingTransfer-Encoding
ตามข้อกำหนด
RFC 7231, section 6.3.5: 204 No Content และ
RFC 7231, section 6.3.6: 205 Reset Content เซิร์ฟเวอร์ต้นทางไม่ควรส่งเนื้อหาเพิ่มเติม
เป็นส่วนหนึ่งของเนื้อหาการตอบกลับที่มีรหัสสถานะ 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 |
| เนื้อหาการตอบกลับ | ข้อผิดพลาด | ข้อผิดพลาด |
ส่วนหัว (ตั้งค่าเป็นค่าที่ไม่ใช่ 0) |
ข้อผิดพลาด | ข้อผิดพลาด |
(ตั้งค่าเป็น การเข้ารหัสที่รองรับใน Apigee Edge) |
ข้อผิดพลาด | ไม่มีข้อผิดพลาด |
Transfer-Encoding |
ข้อผิดพลาด | ข้อผิดพลาด |
สาเหตุที่เป็นไปได้ของข้อผิดพลาดนี้มีดังนี้
| สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาที่ใช้ได้กับ |
|---|---|---|
| เนื้อหาการตอบกลับหรือส่วนหัวที่มีการตอบกลับ 204 จากเซิร์ฟเวอร์แบ็กเอนด์ | เซิร์ฟเวอร์แบ็กเอนด์ส่งการตอบกลับ 204 No Content หรือ 205 Reset Content
พร้อมเนื้อหาการตอบกลับและ/หรือส่วนหัว Content-Type,
Content-Encoding หรือ Transfer-Encoding อย่างน้อย 1 รายการ |
ผู้ใช้ Edge Public และ Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคใดเทคนิคหนึ่งต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้การตรวจสอบ API
- ลงชื่อเข้าใช้ UI ของ Apigee Edge ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนไปใช้องค์กรที่ต้องการตรวจสอบปัญหา
- ไปที่หน้า Analyze > API Monitoring > Investigate
- เลือกกรอบเวลาที่เฉพาะเจาะจงซึ่งคุณพบข้อผิดพลาด
- พล็อต Fault Code เทียบกับ Time
เลือกเซลล์ที่มีรหัสข้อผิดพลาด
protocol.http.ResponseWithBodyดังที่ แสดงด้านล่าง
คุณจะเห็นข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
protocol.http.ResponseWithBodyดังที่แสดงด้านล่าง
คลิกดูบันทึก แล้วขยายแถวสำหรับคำขอที่ไม่สำเร็จ
- จากหน้าต่างบันทึก ให้จดรายละเอียดต่อไปนี้
- รหัสสถานะ:
502 - แหล่งที่มาของข้อผิดพลาด:
target - รหัสข้อผิดพลาด:
protocol.http.ResponseWithBody
- รหัสสถานะ:
- หากแหล่งที่มาของข้อผิดพลาด มีค่าเป็น
targetและรหัสข้อผิดพลาด มีค่าเป็นprotocol.http.ResponseWithBodyแสดงว่าข้อผิดพลาดเกิดขึ้นเนื่องจากเซิร์ฟเวอร์แบ็กเอนด์ส่งรหัสสถานะ204 No Contentหรือ205 Reset Contentพร้อมเนื้อหาการตอบกลับและ/หรือส่วนหัวรายการใดรายการหนึ่งที่ระบุไว้ในส่วนสาเหตุที่เป็นไปได้
เครื่องมือติดตาม
วิธีวินิจฉัยข้อผิดพลาดโดยใช้เครื่องมือติดตาม
- เปิดใช้เซสชันการติดตาม
และดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้:
- รอให้ข้อผิดพลาด
502 Bad Gatewayเกิดขึ้น หรือ - หากคุณจำลองปัญหาได้ ให้เรียก API และจำลองข้อผิดพลาด
502 Bad Gateway
- รอให้ข้อผิดพลาด
ตรวจสอบว่าได้เปิดใช้แสดง FlowInfo ทั้งหมด แล้ว
- เลือกคำขอที่ไม่สำเร็จรายการใดรายการหนึ่ง แล้วตรวจสอบการติดตาม
- เลื่อนดูขั้นตอนต่างๆ ของการติดตามและค้นหาตำแหน่งที่เกิดข้อผิดพลาด
โดยปกติแล้วคุณจะพบข้อผิดพลาดใน
flowinfoError ทันทีหลังจากขั้นตอนส่งคำขอไปยังเซิร์ฟเวอร์เป้าหมาย ดังที่แสดงด้านล่าง:สถานการณ์ที่ 1
สถานการณ์ที่ 1: เซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วยรหัสสถานะ
204 No Contentซึ่งมีเนื้อหาการตอบกลับและ/หรือส่วนหัวรายการใดรายการหนึ่งที่ระบุไว้ใน สาเหตุที่เป็นไปได้
จดค่าต่อไปนี้จากการติดตาม
- error:
Received 204 Response with message body - error.class:
com.apigee.rest.framework.BadGateway
สถานการณ์ที่ 2
สถานการณ์ที่ 2: เซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วยรหัสสถานะ
204 No Contentซึ่งมีเนื้อหาการตอบกลับและ/หรือส่วนหัวรายการใดรายการหนึ่งที่ระบุไว้ใน สาเหตุที่เป็นไปได้
จดค่าต่อไปนี้จากการติดตาม
- error:
Received 205 Response with message body - error.class:
com.apigee.rest.framework.BadGateway
- error:
- ไปที่ขั้นตอน 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.ResponseWithBodyX-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.ResponseWithBodyX-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 ตามที่อธิบายไว้ใน ขั้นตอนการวินิจฉัยทั่วไป
- หากรหัสข้อผิดพลาด คือ
protocol.http.ResponseWithBodyและ แหล่งที่มาของข้อผิดพลาด มีค่าเป็นtargetแสดงว่าเซิร์ฟเวอร์แบ็กเอนด์ ตอบกลับด้วยรหัสสถานะ204 No Contentหรือ205 Reset Contentพร้อม เนื้อหาการตอบกลับและ/หรือส่วนหัวรายการใดรายการหนึ่งที่ระบุไว้ใน สาเหตุที่เป็นไปได้ หากต้องการตรวจสอบว่าเซิร์ฟเวอร์แบ็กเอนด์ส่งเนื้อหาเพย์โหลดการตอบกลับและ/หรือส่วนหัวอย่างน้อย 1 รายการที่ระบุไว้ใน สาเหตุที่เป็นไปได้ จริงหรือไม่ ให้ทำตามขั้นตอนต่อไปนี้
หากคุณเป็นผู้ใช้ Public Cloud และสามารถส่งคำขอ API เดียวกันไปยัง เซิร์ฟเวอร์แบ็กเอนด์ได้โดยตรงจากระบบใดระบบหนึ่ง
- หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถส่งคำขอ API เดียวกันไปยัง เซิร์ฟเวอร์แบ็กเอนด์ได้โดยตรงจาก Message Processor รายการใดรายการหนึ่งที่เชื่อมโยงกับองค์กรและสภาพแวดล้อมที่เฉพาะเจาะจงซึ่งพบข้อผิดพลาด
ตรวจสอบการตอบกลับที่ได้รับจากเซิร์ฟเวอร์แบ็กเอนด์และยืนยันว่ามีการตอบกลับเพย์โหลดเนื้อหาและ/หรือส่วนหัวอย่างน้อย 1 รายการที่กล่าวถึงข้างต้น หากใช่ แสดงว่านี่คือสาเหตุของข้อผิดพลาดนี้
ตัวอย่างที่ 1
ตัวอย่างที่ 1: การตอบกลับ 204 ของเซิร์ฟเวอร์แบ็กเอนด์พร้อมส่วนหัว Content-Encoding
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
ความละเอียด
ตรวจสอบว่าเซิร์ฟเวอร์แบ็กเอนด์ปฏิบัติตามข้อกำหนด
RFC 7231, section 6.3.6: 205 Reset Content เสมอเมื่อส่งการตอบกลับ 204 No Content
หรือ 205 Reset Content ไปยัง Apigee Edge นั่นคือ เซิร์ฟเวอร์แบ็กเอนด์
ต้องไม่ ส่งข้อมูลต่อไปนี้เป็นส่วนหนึ่งของการตอบกลับ 204 No Content หรือ
205 Reset Content
- เนื้อหาเพย์โหลดการตอบกลับ
- และส่วนหัวต่อไปนี้
Content-LengthContent-EncodingTransfer-Encoding
ข้อมูลจำเพาะ
Apigee Edge จะตอบกลับด้วยรหัสสถานะ 502 Bad Gateway และรหัสข้อผิดพลาด
protocol.http.ResponseWithBody หากเซิร์ฟเวอร์แบ็กเอนด์ส่งการตอบกลับ
204 No Content หรือ 205 Reset Content แต่
ไม่ปฏิบัติตามข้อกำหนด RFC ต่อไปนี้
| ข้อมูลจำเพาะ |
|---|
| RFC 7231, section 6.3.5: 204 No Content |
| RFC 7231, section 6.3.6: 205 Reset Content |
ประเด็นสำคัญที่ควรทราบ
วิธีแก้ปัญหาที่แนะนำคือการแก้ไขเซิร์ฟเวอร์แบ็กเอนด์ให้ส่งรหัสสถานะ 204 No Content
และ 205 Reset Content โดยไม่มีเนื้อหาการตอบกลับและส่วนหัว
Content-Length, Content-Encoding, และ
Transfer-Encoding และปฏิบัติตามข้อกำหนด
RFC 7231, section 6.3.5: 204 No Content และ
RFC 7231, section 6.3.6: 205 Reset Content
หากยังต้องการความช่วยเหลือจากทีมสนับสนุนของ Apigee โปรดไปที่ ข้อมูลการวินิจฉัยที่ต้องรวบรวม
ข้อมูลการวินิจฉัยที่ต้องรวบรวม
รวบรวมข้อมูลการวินิจฉัยต่อไปนี้ แล้วติดต่อ ทีมสนับสนุนของ Apigee Edge
หากคุณเป็นผู้ใช้ Public Cloud โปรดระบุข้อมูลต่อไปนี้
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- ชื่อพร็อกซี API
- คำสั่ง
curlที่สมบูรณ์ซึ่งใช้ในการจำลองข้อผิดพลาด502 - ไฟล์ติดตามสำหรับคำขอ API
หากคุณเป็นผู้ใช้ Private Cloud โปรดระบุข้อมูลต่อไปนี้
- ข้อความแสดงข้อผิดพลาดทั้งหมดที่พบสำหรับคำขอที่ไม่สำเร็จ
- ชื่อสภาพแวดล้อม
- แพ็กเกจพร็อกซี API
- ไฟล์ติดตามสำหรับคำขอ API
บันทึกการเข้าถึง NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logโดยที่: ORG, ENV และ PORT# จะถูกแทนที่ด้วย ค่าจริง
- บันทึกของระบบ Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log