คุณกำลังดูเอกสารประกอบของ 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 รีเซ็ตเนื้อหา |
เนื้อหาการตอบกลับ | ข้อผิดพลาด | ข้อผิดพลาด |
ส่วนหัว (ตั้งค่าเป็นไม่ใช่ศูนย์) |
ข้อผิดพลาด | ข้อผิดพลาด |
(ตั้งค่าเป็น การเข้ารหัสที่รองรับใน Apigee Edge) |
ข้อผิดพลาด | ไม่มีข้อผิดพลาด |
Transfer-Encoding |
ข้อผิดพลาด | ข้อผิดพลาด |
สาเหตุที่เป็นไปได้ของข้อผิดพลาดนี้มีดังนี้
สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาที่ใช้กับ |
---|---|---|
เนื้อหาการตอบกลับหรือส่วนหัวที่มีการตอบสนอง 204 จากเซิร์ฟเวอร์แบ็กเอนด์ | เซิร์ฟเวอร์แบ็กเอนด์จะส่งการตอบกลับ 204 No Content หรือ 205 Reset Content พร้อมเนื้อหาการตอบกลับและ/หรือส่วนหัว Content-Type , Content-Encoding หรือ Transfer-Encoding อย่างน้อย 1 รายการ |
ผู้ใช้ Edge Public และ Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคอย่างใดอย่างหนึ่งต่อไปนี้เพื่อวิเคราะห์ข้อผิดพลาดนี้
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้ API Monitoring
- ลงชื่อเข้าใช้ UI ของ Apigee Edge ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนเป็นองค์กรที่คุณต้องการตรวจสอบปัญหา
- ไปที่หน้าวิเคราะห์ > การตรวจสอบ API > ตรวจสอบ
- เลือกกรอบเวลาเฉพาะที่คุณพบข้อผิดพลาด
- พล็อตโค้ดข้อผิดพลาดเทียบกับเวลา
เลือกเซลล์ที่มีรหัสข้อผิดพลาด
protocol.http.ResponseWithBody
ดังที่แสดงด้านล่างคุณจะเห็นข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
protocol.http.ResponseWithBody
ดังที่แสดงด้านล่างคลิกดูบันทึกแล้วขยายแถวสําหรับคําขอที่ล้มเหลว
- ดูรายละเอียดต่อไปนี้จากหน้าต่าง Logs
- รหัสสถานะ:
502
- แหล่งที่มาของข้อผิดพลาด:
target
- Fault Code:
protocol.http.ResponseWithBody
- รหัสสถานะ:
- หากแหล่งที่มาของข้อผิดพลาดมีค่า
target
และรหัสข้อผิดพลาดมีค่าprotocol.http.ResponseWithBody
แสดงว่าข้อผิดพลาดที่เกิดขึ้นเนื่องจากเซิร์ฟเวอร์แบ็กเอนด์ส่งรหัสสถานะ204 No Content
หรือ205 Reset Content
พร้อมเนื้อหาการตอบกลับและ/หรือส่วนหัวใดส่วนหัวหนึ่งที่กล่าวถึงในส่วนสาเหตุที่เป็นไปได้
เครื่องมือการติดตาม
วิธีวินิจฉัยข้อผิดพลาดโดยใช้เครื่องมือติดตาม
- เปิดใช้เซสชันการติดตาม
และเลือกดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้
- รอจนกว่าจะเกิดข้อผิดพลาด
502 Bad Gateway
หรือ - หากทำให้ปัญหาเกิดซ้ำได้ ให้เรียก API และจำลองข้อผิดพลาด
502 Bad Gateway
- รอจนกว่าจะเกิดข้อผิดพลาด
ตรวจสอบว่าเปิดใช้ Show FlowInfos ทั้งหมดแล้ว โดยทำดังนี้
- เลือกคำขอที่ล้มเหลว 1 รายการและตรวจสอบการติดตาม
- ไปยังระยะต่างๆ ของการติดตามและค้นหาตำแหน่งที่ความล้มเหลวเกิดขึ้น
โดยทั่วไปแล้ว คุณจะพบข้อผิดพลาดในข้อผิดพลาด
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) ในการติดตาม แล้วคลิกตัวเลือกนั้น
เลื่อนลงไปที่ส่วน Phase Details, Error Headers และระบุค่าของ 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 จากเซิร์ฟเวอร์แบ็กเอนด์
การวินิจฉัย
- กำหนด Fault Code และ Fault Source สำหรับข้อผิดพลาดที่พบโดยใช้ API Monitoring, เครื่องมือติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ในขั้นตอนการวิเคราะห์ทั่วไป
- หาก Fault Code คือ
protocol.http.ResponseWithBody
และ Fault Source มีค่าtarget
แสดงว่าเซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วยรหัสสถานะ204 No Content
หรือ205 Reset Content
พร้อมเนื้อหาการตอบกลับและ/หรือหนึ่งในส่วนหัวที่กล่าวถึงในสาเหตุที่เป็นไปได้ หากต้องการตรวจสอบว่าเซิร์ฟเวอร์แบ็กเอนด์ได้ส่งเนื้อหาเพย์โหลดการตอบกลับและ/หรือส่วนหัวอย่างน้อย 1 รายการที่กล่าวถึงในสาเหตุที่เป็นไปได้จริงหรือไม่ ให้ทําตามขั้นตอนต่อไปนี้
หากคุณเป็นผู้ใช้ Cloud สาธารณะและคุณสามารถส่งคำขอ 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 ของเซิร์ฟเวอร์แบ็กเอนด์ที่มีส่วนหัวความยาวของเนื้อหา
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 ส่วน 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