คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP 502 Bad Gateway
พร้อมรหัสข้อผิดพลาด
protocol.http.TooBigLine
เป็นการตอบกลับสำหรับการเรียก API
ข้อความแสดงข้อผิดพลาด
แอปพลิเคชันไคลเอ็นต์ได้รับโค้ดตอบกลับต่อไปนี้
HTTP/1.1 502 Bad Gateway
นอกจากนี้ คุณอาจสังเกตเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้
{ "fault":{ "faultstring":"response line size exceeding 2,048", "detail":{ "errorcode":"protocol.http.TooBigLine" } } }
สาเหตุที่เป็นไปได้
ข้อผิดพลาดนี้จะเกิดขึ้นหากขนาดบรรทัดการตอบกลับที่ส่งโดยแท็ก เซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์ไปยัง Apigee Edge เป็นส่วนหนึ่งของการตอบสนอง HTTP มากกว่าค่าสูงสุดที่อนุญาต ขีดจำกัดใน Apigee Edge
ก่อนที่เราจะดูสาเหตุที่เป็นไปได้ของข้อผิดพลาดนี้ มาดูกันว่าบรรทัดการตอบกลับ และวิธีตรวจสอบขนาด
ทำความเข้าใจบรรทัดตอบกลับ
การตอบกลับ HTTP โดยทั่วไปประกอบด้วย 3 ส่วน ดังนี้
- บรรทัดสถานะ (เรียกว่า Response-Line ใน Apigee)
- ( ชุดส่วนหัว HTTP )
- [ เนื้อความ ]
บรรทัดการตอบกลับประกอบด้วย 3 ส่วน ได้แก่ เวอร์ชันโปรโตคอล ตามด้วยตัวเลข รหัสสถานะและวลีที่เกี่ยวข้องดังที่แสดงด้านล่าง
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
เมื่อแอปพลิเคชันเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์ส่งการตอบกลับ HTTP บรรทัดแรกที่
ที่ส่งจะหมายถึงบรรทัดตอบกลับตามที่อธิบายไว้ข้างต้น ตามด้วย
ส่วนหัวและเนื้อหาการตอบสนอง/เพย์โหลด ภาพหน้าจอตัวอย่างต่อไปนี้แสดง
คำขอ curl
ส่วน Request และส่วน Response (พร้อมด้วย
Response-Line)
ทำความเข้าใจเกี่ยวกับขนาดของบรรทัดการตอบกลับ
ในตัวอย่างที่พูดถึงข้างต้น บรรทัด start (บรรทัดแรก) ในคำตอบยัง ซึ่งเรียกว่า Response-Line ดังนี้
HTTP/1.1 200 OK
บรรทัดการตอบกลับนี้มีขนาดเป็น
~15 bytes
เนื่องจากมี15 ASCII characters
เนื่องจากอยู่ในระยะ ขีดจำกัดที่อนุญาตใน Apigee Edge การตอบกลับจะส่งกลับไปที่ไคลเอ็นต์โดยไม่มี จาก Apigee Edge- ในทำนองเดียวกัน หากคุณดูที่
faultstring
ใน ข้อความแสดงข้อผิดพลาดที่แสดงด้านบน มี"response line size exceeding 2,048"
การดำเนินการนี้จะระบุว่า Response-Line ในการตอบกลับ HTTP ที่ส่งโดยเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์มีขนาดเกิน 2,048 ไบต์
ทำความเข้าใจบรรทัดตอบกลับขนาดใหญ่
ตามคำจำกัดความของ Status-Line (ในที่นี้จะเรียกว่า Response-Line) และคำขอ HTTP โดยทั่วไป และ และขนาดจะเล็กกว่าขีดจำกัดเริ่มต้นที่ 2 K ที่กำหนดไว้ใน Apigee Edge อยู่มาก ดังนั้นเราอาจจะไม่ ถึงขีดจำกัดแล้ว อย่างไรก็ตาม ต่อไปนี้เป็นสถานการณ์ที่คุณอาจใช้เกินขีดจำกัดนี้
- เซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์ไม่ใช่ระบบ HTTP แอปอาจตอบสนองด้วยที่ไม่ใช่ HTTP คำตอบ
- เซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์มีปัญหาและส่ง Response-Line ที่ยาวโดยเป็นส่วนหนึ่งของ HTTP คำตอบ
อ่านเพิ่มเติมเกี่ยวกับสิ่งนี้ใน ได้รับข้อผิดพลาด Protocol.http.TooBigLine "บรรทัดการตอบกลับมีขนาดเกิน 2,048
สาเหตุที่เป็นไปได้ของข้อผิดพลาดมีดังนี้
สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาสำหรับ |
---|---|---|
บรรทัดการตอบกลับมีขนาดเกินขีดจำกัดที่อนุญาต | ขนาดของบรรทัดการตอบกลับที่ส่งโดยเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์โดยเป็นส่วนหนึ่งของ การตอบสนองของ HTTP ไปยัง Apigee Edge สูงกว่า ขีดจำกัดที่อนุญาตใน Apigee Edge | ผู้ใช้ Edge สาธารณะและ Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้การตรวจสอบ API
- ลงชื่อเข้าใช้ Apigee Edge UI ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนเป็นองค์กรที่ต้องการตรวจสอบปัญหา
- ไปที่ วิเคราะห์ > การตรวจสอบ API > หน้าตรวจสอบ
- เลือกกรอบเวลาที่คุณพบข้อผิดพลาด
- คุณอาจเลือกตัวกรองพร็อกซีเพื่อจำกัดรหัสข้อผิดพลาดให้แคบลง
- พล็อตรหัสข้อผิดพลาดเทียบกับเวลา
เลือกเซลล์ที่มีรหัสข้อผิดพลาด
protocol.http.TooBigLine
เป็น แสดงอยู่ด้านล่างคุณจะเห็นข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
protocol.http.TooBigLine
ตามที่แสดงด้านล่าง:คลิก ดูบันทึก และขยายแถวสำหรับคำขอที่ล้มเหลว
- จากหน้าต่าง Logs ให้จดรายละเอียดต่อไปนี้
- รหัสสถานะ:
502
- แหล่งที่มาของข้อผิดพลาด:
target
- รหัสข้อผิดพลาด:
protocol.http.TooBigLine
- รหัสสถานะ:
- หากแหล่งที่มาของข้อผิดพลาดมีค่า
target
และข้อผิดพลาด Code มีค่าprotocol.http.TooBigLine
ซึ่งบ่งชี้ว่า การตอบสนอง HTTP จากเซิร์ฟเวอร์เป้าหมาย/ แบ็กเอนด์มีขนาด Response-Line มากกว่า ขีดจำกัดสูงสุดที่อนุญาตใน Apigee Edge
เครื่องมือการติดตาม
- เปิดใช้เซสชันการติดตาม
และเลือกระหว่าง
- รอให้เกิดข้อผิดพลาด
502 Bad Gateway
หรือ - หากคุณทำให้เกิดปัญหาซ้ำได้ ให้เรียก API และทำให้เกิดข้อผิดพลาด
502 Bad Gateway
ซ้ำ
- รอให้เกิดข้อผิดพลาด
- เลือกคำขอที่ไม่สำเร็จรายการหนึ่งและตรวจสอบการติดตาม
- ไปยังส่วนต่างๆ ของการติดตามและค้นหาตำแหน่งที่ล้มเหลว เกิดขึ้น
โดยทั่วไปแล้ว คุณจะพบข้อผิดพลาดในข้อผิดพลาด
flowinfo
หลังช่วงส่งคำขอไปยังเซิร์ฟเวอร์เป้าหมายดังที่แสดงด้านล่างบันทึกค่าของข้อผิดพลาดจากการติดตามดังนี้
- ข้อผิดพลาด:
response line exceeding 2,048
- error.class:
com.apigee.errors.http.server.BadGateway
นี่เป็นการระบุว่า Apigee Edge (คอมโพเนนต์ตัวประมวลผลข้อความ) แสดงข้อผิดพลาดเนื่องจาก ทันทีที่ได้รับการตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์เนื่องจากขนาดของบรรทัดการตอบกลับ เกินขีดจำกัดที่อนุญาต
- ข้อผิดพลาด:
คุณจะเห็นข้อความแสดงข้อผิดพลาดที่ส่งไปยังไคลเอ็นต์ในการตอบกลับที่ส่งไปยัง เฟสลูกค้าดังที่แสดงด้านล่าง
- บันทึกค่าของข้อผิดพลาดจากการติดตามดังนี้
- ข้อผิดพลาด:
502 Bad Gateway
- เนื้อหาข้อผิดพลาด:
{"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
- ข้อผิดพลาด:
คุณอาจไปยังขั้นตอน AX (ข้อมูลที่ Analytics บันทึกไว้) ในการติดตามได้ด้วย แล้วคลิกเพื่อดูรายละเอียดข้อผิดพลาด
โปรดสังเกตค่าต่อไปนี้
ส่วนหัวของคำขอ ค่า X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source target
เนื้อหาข้อผิดพลาด : เนื้อหา {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
NGINX
วิธีวินิจฉัยข้อผิดพลาดโดยใช้บันทึกการเข้าถึง NGINX
- หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถใช้บันทึกการเข้าถึง NGINX เพื่อ
ระบุข้อมูลสำคัญเกี่ยวกับข้อผิดพลาด HTTP
502
ตรวจสอบบันทึกการเข้าถึง NGINX ดังต่อไปนี้
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
ที่ไหน: ระบบจะแทนที่ ORG, ENV และ PORT# ด้วยค่าจริง
- ค้นหาเพื่อดูว่ามีข้อผิดพลาด
502
รายการเกิดขึ้นในช่วงระยะเวลาหนึ่งๆ หรือไม่ (หากเคยมีปัญหาเกิดขึ้นในอดีต) หรือหากมีคำขอที่ยังคงดำเนินการไม่สำเร็จ502
หากคุณพบข้อผิดพลาด
502
ที่มี X-Apigee-fault-code จับคู่ค่าของprotocol.http.TooBigLine
แล้วหา ค่าของ X-Apigee-fault-source.ตัวอย่างรายการข้างต้นจากบันทึกการเข้าถึง NGINX มีค่าต่อไปนี้สำหรับ X- Apigee-fault-code และ X-Apigee-fault-source:
ส่วนหัวการตอบกลับ ค่า X-Apigee-fault-code protocol.http.TooBigLine
X-Apigee-fault-source target
สาเหตุ: บรรทัดการตอบกลับมีขนาดเกินขีดจํากัดที่อนุญาต
การวินิจฉัย
- กำหนดรหัสข้อผิดพลาดและแหล่งที่มาของข้อผิดพลาดสำหรับข้อผิดพลาดที่พบโดยใช้ API การตรวจสอบ เครื่องมือการติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป
- หาก Fault Source มีค่า
target
ก็จะแสดงค่าว่า ขนาดบรรทัดการตอบสนองที่ส่งโดยแอปพลิเคชันเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์ไปยัง Apigee ใหญ่กว่า ขีดจำกัดที่อนุญาตใน Apigee Edge คุณสามารถตรวจสอบได้ว่าบรรทัดการตอบกลับมีขนาดเกินขีดจำกัด 2 KB ที่อนุญาตหรือไม่ โดยใช้ วิธีการต่อไปนี้
ข้อความแสดงข้อผิดพลาด
หากต้องการตรวจสอบโดยใช้ข้อความแสดงข้อผิดพลาด ให้ทำดังนี้
หากคุณมีสิทธิ์เข้าถึงข้อความแสดงข้อผิดพลาดทั้งหมดที่ได้รับจาก Apigee Edge โปรดดู
faultstring
ตัวอย่างข้อความแสดงข้อผิดพลาด
"faultstring":"response line size exceeding 2,048"
faultstring
ด้านบนหมายความว่าขนาดบรรทัดการตอบกลับเกินค่าที่อนุญาต ที่ 2 KBคำขอจริง
วิธีตรวจสอบโดยใช้คำขอจริงมีดังนี้
หากคุณมีสิทธิ์เข้าถึงคำขอจริงที่ส่งไปยังเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์ ให้ทำตามขั้นตอนต่อไปนี้
- ยืนยันขนาดของบรรทัดการตอบกลับ
- หากคุณพบว่า URI มีขนาดเกิน
ขีดจำกัดที่อนุญาตใน Apigee Edge นั่นเป็นสาเหตุของ
ถึงปัญหา
ตัวอย่างการตอบสนองจากเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์
curl -v http://HOSTALIAS/test
* Trying 3.2.1.4... * TCP_NODELAY set * Connected to <hostalias> (3.2.1.4) port 80 (#0) > GET /test HTTP/1.1 > Host: HOSTALIAS > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 1111…<trimmed>...11111111 < Date: Mon, 26 Jul 2021 07:07:18 GMT < Content-Type: application/json < Content-Length: 269 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < { <Response Body> } * Connection #0 to host <hostalias> left intact * Closing connection 0
ในกรณีข้างต้น บรรทัดการตอบกลับ
HTTP/1.1 200 1111…<trimmed>...11111111
มีขนาดใหญ่กว่า 2 KB ซึ่งหมายความว่ามี อักขระ ASCII มากกว่า 2 Kถ้าคุณใช้ไคลเอ็นต์อื่น คุณสามารถตรวจสอบบันทึกของไคลเอ็นต์แล้วลอง เพื่อค้นหาขนาดของ Response-Line ที่ส่งไปยัง Apigee Edge
บันทึกของผู้ประมวลผลข้อความ
วิธีตรวจสอบโดยใช้บันทึกของโปรแกรมประมวลผลข้อความ
หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถใช้บันทึกสำหรับตัวประมวลผลข้อความเพื่อ ตรวจสอบว่าขนาดบรรทัดการตอบกลับเกิน ขีดจำกัดที่อนุญาตใน Apigee Edge
- กำหนดรหัสข้อความของคำขอที่ล้มเหลวโดยใช้การตรวจสอบ API, เครื่องมือการติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป
ค้นหารหัสข้อความในบันทึกตัวประมวลผลข้อความโดยใช้คำสั่งต่อไปนี้
/opt/apigee/var/log/edge-message-processor/logs/system.log
คุณจะพบเส้นทางจาก
system.log
ที่คล้ายคลึงกับข้อความต่อไปนี้2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592 useCount=1 bytesRead=0 bytesWritten=201 age=144ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048 at <snipped> 2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
ข้อความ
message = response line size exceeding 2,048
ข้างต้น ข้อความแสดงข้อผิดพลาดระบุว่าบรรทัดการตอบกลับมีขนาดเกิน 2 KB ดังนั้น Apigee Edge จะแสดงข้อยกเว้นและแสดงผลรหัสสถานะ502
ด้วย รหัสข้อผิดพลาดprotocol.http.TooBigline
ในแอปพลิเคชันไคลเอ็นต์
ความละเอียด
แก้ไขขนาด
ตัวเลือกที่ 1 [แนะนำ]: แก้ไขแอปพลิเคชันเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์ที่ไม่ส่ง บรรทัดตอบกลับของขนาดเกินขีดจำกัดที่อนุญาต
- วิเคราะห์สาเหตุที่ไคลเอ็นต์ที่เฉพาะเจาะจงส่งบรรทัดการตอบกลับที่มีขนาดมากขึ้น มากกว่าขีดจำกัดที่อนุญาตตามที่ระบุไว้ในขีดจำกัด
- หากไม่พึงประสงค์ ให้แก้ไขแอปพลิเคชันเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์เพื่อให้ จะส่งบรรทัดการตอบกลับที่มีขนาดต่ำกว่าขีดจำกัดที่อนุญาต
- ถ้าต้องการ และคุณต้องการส่งบรรทัดการตอบกลับขนาดมากกว่า ไปที่ตัวเลือกถัดไป
CwC
ตัวเลือกที่ 2: ใช้พร็อพเพอร์ตี้ CwC เพื่อเพิ่มขีดจำกัดบรรทัดการตอบกลับ
Apigee จะมอบ CwC ซึ่งทำให้เพิ่มขีดจำกัดขนาดบรรทัดการตอบกลับได้ โปรดดูรายละเอียดที่หัวข้อ ตั้งค่าขีดจำกัดบรรทัดตอบกลับในตัวประมวลผลข้อความ
จำกัดสูงสุด
Apigee คาดว่าแอปพลิเคชันไคลเอ็นต์และเซิร์ฟเวอร์แบ็กเอนด์จะไม่ส่งคำขอ/บรรทัดการตอบกลับ ซึ่งมีขนาดเกินขีดจำกัดที่อนุญาตตามที่ระบุไว้ในเอกสารขีดจำกัดบรรทัดคำขอ/ตอบกลับ ในขีดจำกัด Apigee Edge
- หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ ขีดจำกัดสูงสุดสำหรับคำขอและ ขนาดบรรทัดการตอบกลับได้รับการบันทึกเป็นเอกสารสำหรับขนาดคําขอ/บรรทัดการตอบกลับใน ขีดจำกัด Apigee Edge
- หากคุณเป็นผู้ใช้ Private Cloud คุณอาจได้แก้ไขขีดจำกัดสูงสุดเริ่มต้น ขีดจำกัดสำหรับขนาดคำขอและบรรทัดการตอบกลับ (แม้ว่าจะไม่ใช่แนวทางปฏิบัติที่แนะนำก็ตาม) คุณสามารถกำหนดขนาดสูงสุดของบรรทัดการตอบกลับได้โดยทำตามวิธีการใน วิธีตรวจสอบขีดจำกัดปัจจุบัน
วิธีตรวจสอบขีดจำกัดปัจจุบัน
ส่วนนี้จะอธิบายวิธียืนยันว่าพร็อพเพอร์ตี้ HTTPResponse.line.limit
มี
อัปเดตเป็นค่าใหม่ให้กับตัวประมวลผลข้อความแล้ว
- ค้นหาคุณสมบัติในเครื่องประมวลผลข้อความ
HTTPResponse.line.limit
ในช่วง ไดเรกทอรี/opt/apigee/edge-message-processor/conf
และตรวจสอบเพื่อ ให้ดูค่าที่ตั้งไว้ตามที่แสดงด้านล่างgrep -ri "HTTPResponse.line.limit" /opt/apigee/edge-message-processor/conf
- ตัวอย่างผลลัพธ์จากคำสั่งด้านบนมีดังนี้
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
ในตัวอย่างเอาต์พุตด้านบน จะเห็นว่าพร็อพเพอร์ตี้
HTTPResponse.line.limit
ได้รับการตั้งค่าด้วยค่า2k
ในhttp.properties
ซึ่งเป็นการระบุว่าขีดจำกัดสำหรับขนาดบรรทัดการตอบกลับที่กำหนดค่าใน Apigee สำหรับ Private ระบบคลาวด์มีขนาด 2 KB
หากยังต้องการความช่วยเหลือจากทีมสนับสนุนของ Apigee ให้ไปที่ ต้องรวบรวมข้อมูลการวินิจฉัย
ต้องรวบรวมข้อมูลการวินิจฉัย
รวบรวมข้อมูลการวินิจฉัยต่อไปนี้ จากนั้นให้ติดต่อทีมสนับสนุนของ Apigee Edge
หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ โปรดระบุข้อมูลต่อไปนี้
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- ชื่อพร็อกซี API
- ใช้คำสั่ง curl เพื่อสร้างข้อผิดพลาด
502
ซ้ำ - ไฟล์การติดตามสำหรับคำขอ API
หากคุณเป็นผู้ใช้ Private Cloud ให้ระบุข้อมูลต่อไปนี้
- พบข้อความแสดงข้อผิดพลาดทั้งหมดสำหรับคำขอที่ล้มเหลว
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- แพ็กเกจพร็อกซี API
- ไฟล์การติดตามสำหรับคำขอ API ที่ล้มเหลว
- ทำตามคำสั่ง
curl
ในการสร้างข้อผิดพลาด502
ซ้ำ บันทึกการเข้าถึง 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