คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP 502 Bad Gateway
ด้วย
รหัสข้อผิดพลาด protocol.http.TooBigHeaders
เป็นการตอบกลับสำหรับ API
ข้อความแสดงข้อผิดพลาด
แอปพลิเคชันไคลเอ็นต์ได้รับโค้ดตอบกลับต่อไปนี้
HTTP/1.1 502 Bad Gateway
นอกจากนี้ คุณอาจสังเกตเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้
{ "fault":{ "faultstring":"response headers size exceeding 25,600", "detail":{ "errorcode":"protocol.http.TooBigHeaders" } } }
สาเหตุที่เป็นไปได้
ข้อผิดพลาดนี้เกิดขึ้นหากขนาดรวมของส่วนหัวที่ส่งโดยเป้าหมาย/แบ็กเอนด์ เซิร์ฟเวอร์ Apigee Edge เป็นส่วนหนึ่งของการตอบสนอง HTTP มากกว่าที่อนุญาต ขีดจำกัดที่อนุญาตใน Apigee Edge
สาเหตุที่เป็นไปได้สำหรับข้อผิดพลาดนี้มีดังนี้
สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาสำหรับ |
---|---|---|
ส่วนหัวในการตอบกลับมีขนาดเกินขีดจำกัดที่อนุญาต | ขนาดส่วนหัวของส่วนหัวหนึ่งๆ หรือผลรวมของขนาดส่วนหัวทั้งหมดของ ส่วนหัวที่ส่งโดยเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์โดยเป็นส่วนหนึ่งของการตอบสนอง HTTP ไปยัง Apigee Edge เกินขีดจำกัดที่อนุญาตใน Apigee Edge | ผู้ใช้ Edge สาธารณะและ Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้การตรวจสอบ API
- ลงชื่อเข้าใช้ Apigee Edge UI ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนเป็นองค์กรที่ต้องการตรวจสอบปัญหา
- ไปที่ วิเคราะห์ > การตรวจสอบ API > หน้าตรวจสอบ
- เลือกกรอบเวลาที่คุณพบข้อผิดพลาด
- คุณอาจเลือกตัวกรองพร็อกซีเพื่อจำกัดรหัสข้อผิดพลาดให้แคบลง
- พล็อตรหัสข้อผิดพลาดเทียบกับเวลา
เลือกเซลล์ที่มีรหัสข้อผิดพลาด
protocol.http.TooBigHeaders
เป็น แสดงอยู่ด้านล่างคุณจะเห็นข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
protocol.http.TooBigHeaders
ตามที่แสดงด้านล่าง:คลิก ดูบันทึก และขยายแถวสำหรับคำขอที่ล้มเหลว
- จากหน้าต่าง Logs ให้จดรายละเอียดต่อไปนี้
- รหัสสถานะ:
502
- แหล่งที่มาของข้อผิดพลาด:
target
- รหัสข้อผิดพลาด:
protocol.http.TooBigHeaders
- รหัสสถานะ:
- หากแหล่งที่มาของข้อผิดพลาดมีค่า
target
และข้อผิดพลาด Code มีค่าprotocol.http.TooBigHeaders
ซึ่งบ่งชี้ว่า การตอบกลับ HTTP จากเซิร์ฟเวอร์เป้าหมาย/ เซิร์ฟเวอร์แบ็กเอนด์มีส่วนหัวที่มีขนาดใหญ่กว่า เกินขีดจำกัดที่อนุญาตใน Apigee Edge
เครื่องมือการติดตาม
- เปิดใช้เซสชันการติดตาม
และเลือกระหว่าง
- รอให้ข้อผิดพลาด
502 Bad Gateway
เกิดขึ้น หรือ - หากคุณทำให้เกิดปัญหาซ้ำได้ ให้เรียก API และทำให้เกิดข้อผิดพลาด
502 Bad Gateway
ซ้ำ
- รอให้ข้อผิดพลาด
- เลือกคำขอที่ไม่สำเร็จรายการหนึ่งและตรวจสอบการติดตาม
- ไปยังส่วนต่างๆ ของการติดตามและค้นหาตำแหน่งที่ล้มเหลว เกิดขึ้น
โดยปกติแล้วคุณจะเห็นข้อผิดพลาดนี้ในขั้นตอนที่มีชื่อว่า Error (ข้อผิดพลาด) หลัง ระยะส่งคำขอไปยังเซิร์ฟเวอร์เป้าหมายดังที่แสดงด้านล่าง
บันทึกค่าของข้อผิดพลาดจากการติดตามดังนี้
- ข้อผิดพลาด:
response headers size exceeding 25,600
- error.class:
com.apigee.errors.http.server.BadGateway
นี่เป็นการระบุว่า Apigee Edge (คอมโพเนนต์ตัวประมวลผลข้อความ) แสดงข้อผิดพลาดเนื่องจาก ทันทีที่ได้รับการตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์เนื่องจากส่วนหัวมีขนาด เกินขีดจำกัดที่อนุญาต
- ข้อผิดพลาด:
คุณจะเห็นข้อผิดพลาดใน Response Sent to Client การตอบกลับข้อผิดพลาดที่ส่งโดย Apigee Edge ดังที่แสดงด้านล่าง
- จดค่าของข้อผิดพลาดจากการติดตาม การติดตามตัวอย่างข้างต้นแสดงสิ่งต่อไปนี้
- ข้อผิดพลาด:
502 Bad Gateway
- เนื้อหาข้อผิดพลาด:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- ข้อผิดพลาด:
ไปยังช่วง AX (Analytics Data Recorded) ในการติดตาม แล้วคลิกเพื่อดูรายละเอียดที่เกี่ยวข้อง
โปรดสังเกตค่าต่อไปนี้
ส่วนหัวของข้อผิดพลาด ค่า X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
เนื้อหาข้อผิดพลาด: เนื้อหา {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
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.TooBigHeaders
ในช่วงเวลาที่ระบุ (หากเคยมีปัญหาเกิดขึ้นในอดีต) หรือหากมีคำขอที่ยังคงดำเนินการไม่สำเร็จ502
หากคุณพบข้อผิดพลาด
502
ที่มี X-Apigee-fault-code จับคู่ค่าของprotocol.http.TooBigHeaders
แล้วหา ค่าของ X-Apigee-fault-source.ตัวอย่างข้อผิดพลาด 502 จากบันทึกการเข้าถึง NGINX
ตัวอย่างรายการข้างต้นจากบันทึกการเข้าถึง NGINX มีค่าต่อไปนี้สำหรับ X-Apigee-fault-code และ X-Apigee-fault-code
ส่วนหัวของข้อผิดพลาด ค่า X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
สาเหตุ: ส่วนหัวในการตอบกลับมีขนาดเกินขีดจำกัดที่อนุญาต
การวินิจฉัย
- กำหนดรหัสข้อผิดพลาด แหล่งที่มาของข้อผิดพลาด และขนาดเพย์โหลดการตอบกลับสำหรับองค์ประกอบ ข้อผิดพลาดที่พบในการใช้การตรวจสอบ API, เครื่องมือติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป
- หากแหล่งที่มาของข้อผิดพลาดมีค่า
target
ค่านี้หมายความว่า การตอบสนองที่เซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์ส่งไปยัง Apigee มีส่วนหัวมีขนาดใหญ่กว่า เกินขีดจำกัดที่อนุญาตใน Apigee Edge - คุณตรวจสอบได้ว่าการตอบกลับจากเป้าหมาย/แบ็กเอนด์มีส่วนหัวที่มีขนาดเท่ากับ
มากกว่าขีดจำกัดที่อนุญาตโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
ข้อความแสดงข้อผิดพลาด
หากต้องการตรวจสอบโดยใช้ข้อความแสดงข้อผิดพลาด ให้ทำดังนี้
หากคุณมีสิทธิ์เข้าถึงข้อความแสดงข้อผิดพลาดทั้งหมดที่ได้รับจาก Apigee Edge โปรดดูที่
faultstring
faultstring
ระบุว่า ส่วนหัวการตอบกลับมีขนาดเกินขีดจำกัดที่อนุญาตตัวอย่างข้อความแสดงข้อผิดพลาด
"faultstring":"response headers size exceeding 25,600"
ในข้อความแสดงข้อผิดพลาดข้างต้น หมายเหตุใน
faultstring
ว่า การตอบกลับมีส่วนหัวที่มีขนาดโดยรวมเกินขีดจำกัดที่อนุญาตคำขอจริง
วิธีตรวจสอบโดยใช้คำขอจริงมีดังนี้
หากคุณมีสิทธิ์เข้าถึงคำขอจริงที่ส่งไปยังเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์ จากนั้นให้ทำตามขั้นตอนต่อไปนี้
- หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ/Private Cloud ให้ส่งคำขอ ไปยังเซิร์ฟเวอร์แบ็กเอนด์โดยตรง จากเซิร์ฟเวอร์แบ็กเอนด์เองหรือเซิร์ฟเวอร์อื่นๆ เครื่องที่คุณได้รับอนุญาตให้ส่งคำขอไปยังแบ็กเอนด์ เซิร์ฟเวอร์
- หากคุณเป็นผู้ใช้ Private Cloud คุณยังสามารถส่งคำขอเพื่อ เซิร์ฟเวอร์แบ็กเอนด์จากหนึ่งใน Message Processor
- ตรวจสอบการตอบกลับที่ได้รับจากเซิร์ฟเวอร์แบ็กเอนด์ ประมวลผลและยืนยันขนาดโดยรวมของส่วนหัวที่ส่งไปในคำตอบ
ถ้าคุณพบว่าขนาดของส่วนหัวในเพย์โหลดการตอบกลับ เกินขีดจำกัดที่อนุญาตใน Apigee Edge นั่นก็คือสาเหตุของปัญหา
ตัวอย่างการตอบสนองจากเซิร์ฟเวอร์เป้าหมาย
curl -v https://TARGET_SERVER_HOST/test
* About to connect() to 10.1.0.10 port 9000 (#0) * Trying 10.1.0.10... * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0) > GET /test HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.1.0.10:9000 > Accept: */* < < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Length: 0 < Content-Type: text/plain; charset=utf-8 < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
< Testheader1: XVlBzgba—-<snipped>---THctcuAx < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
< Date: Fri, 23 Jul 2021 09:51:22 GMT < * Connection #0 to host 10.1.0.10 left intactในตัวอย่างด้านบน
Testheader1
และTestheader2
มีขนาดสูงกว่า ซึ่งเป็นสาเหตุ สำหรับข้อผิดพลาดนี้ เนื่องจากเกินขีดจำกัดที่อนุญาตใน Apigee Edge
บันทึกของผู้ประมวลผลข้อความ
วิธีตรวจสอบโดยใช้บันทึกของโปรแกรมประมวลผลข้อความ
หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถใช้บันทึกของผู้ประมวลผลข้อมูลข้อความเพื่อ ตรวจสอบว่าขนาดของส่วนหัวการตอบกลับเกินขีดจำกัดหรือไม่ ขีดจำกัดที่อนุญาตใน Apigee Edge
ตรวจสอบบันทึกของตัวประมวลผลข้อความดังนี้
/opt/apigee/var/log/edge-message-processor/logs/system.log
- ค้นหาว่ามีข้อผิดพลาด
502
ในระหว่าง ระยะเวลา (หากปัญหาเกิดขึ้นในอดีต) หรือมีคำขอ ยังคงล้มเหลวกับ502
คุณใช้สตริงการค้นหาต่อไปนี้ได้grep -ri "response headers size exceeding"
- คุณจะพบเส้นทางจาก
system.log
ที่คล้ายคลึงกับเส้นทางต่อไปนี้ ขนาดส่วนหัวการตอบกลับอาจแตกต่างกันไปในกรณีของคุณ:2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1 bytesRead=0 bytesWritten=207 age=640ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600 2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
-
ทันทีที่ตัวประมวลผลข้อความได้รับการตอบกลับจากแบ็กเอนด์/เป้าหมาย และพบว่าส่วนหัวทั้งหมดมีขนาดใหญ่กว่า 25 KB จะหยุดและแสดงข้อผิดพลาด
response headers size exceeding 25,600
โดยบอกเป็นนัยว่าขนาดส่วนหัวทั้งหมดมากกว่า 25 KB และ Apigee แสดงข้อผิดพลาดเมื่อขนาดเริ่มเกินขีดจำกัด 25 KB ที่มีรหัสข้อผิดพลาด ด้วยชื่อ
protocol.http.TooBigHeaders
ความละเอียด
แก้ไขขนาด
ตัวเลือกที่ 1 [แนะนำ]: แก้ไขแอปพลิเคชันเซิร์ฟเวอร์เป้าหมายไม่ให้ส่งขนาดส่วนหัว เกินขีดจำกัด Apigee
- วิเคราะห์สาเหตุที่เซิร์ฟเวอร์เป้าหมายบางรายการส่งขนาดส่วนหัวการตอบกลับมากขึ้น มากกว่าขีดจำกัดที่อนุญาตตามที่ระบุไว้ในขีดจำกัด
- ถ้าไม่เป็นที่ต้องการ ให้แก้ไขแอปพลิเคชันเซิร์ฟเวอร์แบ็กเอนด์เพื่อให้ส่ง ส่วนหัวการตอบกลับที่มีขนาดต่ำกว่า ขีดจำกัดที่อนุญาตใน Apigee Edge
- ตรวจสอบว่าสามารถส่งข้อมูลส่วนหัวโดยเป็นส่วนหนึ่งของเนื้อหาการตอบกลับได้หรือไม่
- หากเป็นไปได้ ให้ส่งข้อมูลขนาดใหญ่ที่คุณวางแผนจะส่ง ส่วนหัวในเนื้อหาการตอบสนอง ซึ่งจะช่วยให้แน่ใจว่าคุณจะไม่ตอบกลับ ขีดจำกัดส่วนหัว
CwC
ตัวเลือกที่ 2 : ใช้พร็อพเพอร์ตี้ CwC เพื่อเพิ่มขีดจำกัดขนาดส่วนหัวการตอบกลับ
Apigee จะมอบ พร็อพเพอร์ตี้ CwC ที่ช่วยให้เพิ่มขีดจำกัดขนาดส่วนหัวการตอบกลับได้ โปรดดูรายละเอียดที่ การกำหนดค่าขีดจำกัดสำหรับตัวประมวลผลข้อความ
จำกัดสูงสุด
Apigee คาดว่าแอปพลิเคชันไคลเอ็นต์และเซิร์ฟเวอร์แบ็กเอนด์จะไม่ส่ง ส่วนหัวมีขนาดเกินขีดจำกัดที่อนุญาตตามที่แสดงไว้ในเอกสาร สำหรับขนาดส่วนหัวของคำขอ/การตอบกลับใน ขีดจำกัด Apigee Edge
- หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ ขีดจำกัดสูงสุดสำหรับ ขนาดส่วนหัวของคำขอและส่วนหัวการตอบกลับเป็นไปตามเอกสารสำหรับขนาดส่วนหัวของคำขอ/การตอบกลับใน ขีดจำกัด Apigee Edge
- หากคุณเป็นผู้ใช้ Private Cloud คุณอาจได้แก้ไขขีดจำกัดสูงสุดเริ่มต้น ขีดจำกัดสำหรับขนาดของส่วนหัวคำขอและส่วนหัวการตอบกลับ (แม้ว่าจะไม่ใช่แนวทางปฏิบัติที่แนะนำก็ตาม) คุณสามารถกำหนดขนาดสูงสุดของส่วนหัวการตอบกลับได้โดยทำตามวิธีการใน วิธีตรวจสอบขีดจำกัดปัจจุบัน
วิธีตรวจสอบขีดจำกัดปัจจุบัน
ส่วนนี้จะอธิบายวิธียืนยันว่าพร็อพเพอร์ตี้ HTTPResponse.headers.limit
มี
อัปเดตเป็นค่าใหม่ให้กับตัวประมวลผลข้อความแล้ว
- ค้นหาคุณสมบัติในเครื่องประมวลผลข้อความ
HTTPResponse.headers.limit
ในช่วง ไดเรกทอรี/opt/apigee/edge-message-processor/conf
และตรวจสอบเพื่อ ให้ดูค่าที่ตั้งไว้ตามที่แสดงด้านล่างgrep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- ตัวอย่างผลลัพธ์จากคำสั่งด้านบนมีดังนี้
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
ในตัวอย่างเอาต์พุตด้านบน โปรดทราบว่าพร็อพเพอร์ตี้
HTTPResponse.headers.limit
ได้รับการตั้งค่าด้วยค่า25k
ในhttp.properties
ค่านี้ระบุว่าขีดจำกัดสำหรับขนาดเพย์โหลดการตอบกลับที่กำหนดค่าใน Apigee สำหรับ Private ระบบคลาวด์มีขนาด 25 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