คุณกำลังดูเอกสารประกอบของ 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 Public และ Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคอย่างใดอย่างหนึ่งต่อไปนี้เพื่อวิเคราะห์ข้อผิดพลาดนี้
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้ API Monitoring
- ลงชื่อเข้าใช้ UI ของ Apigee Edge ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนเป็นองค์กรที่คุณต้องการตรวจสอบปัญหา
- ไปที่หน้าวิเคราะห์ > การตรวจสอบ API > ตรวจสอบ
- เลือกกรอบเวลาเฉพาะที่คุณพบข้อผิดพลาด
- คุณอาจเลือกตัวกรองพร็อกซีเพื่อจำกัดรหัสข้อผิดพลาดให้แคบลง
- พล็อตโค้ดข้อผิดพลาดเทียบกับเวลา
เลือกเซลล์ที่มีรหัสข้อผิดพลาด
protocol.http.TooBigHeaders
ดังที่แสดงด้านล่างคุณจะเห็นข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
protocol.http.TooBigHeaders
ดังที่แสดงด้านล่างคลิกดูบันทึกแล้วขยายแถวสําหรับคําขอที่ล้มเหลว
- ดูรายละเอียดต่อไปนี้จากหน้าต่าง Logs
- รหัสสถานะ:
502
- แหล่งที่มาของข้อผิดพลาด:
target
- Fault Code:
protocol.http.TooBigHeaders
- รหัสสถานะ:
- หากแหล่งที่มาของข้อผิดพลาดมีค่า
target
และรหัสข้อผิดพลาดมีค่าprotocol.http.TooBigHeaders
แสดงว่าการตอบกลับ HTTP จากเซิร์ฟเวอร์ปลายทาง/ แบ็กเอนด์มีส่วนหัวที่มีขนาดมากกว่าขีดจำกัดที่อนุญาตใน Apigee Edge
เครื่องมือการติดตาม
- เปิดใช้เซสชันการติดตาม
และเลือกดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้
- รอจนกว่าจะเกิดข้อผิดพลาด
502 Bad Gateway
หรือ - หากทำให้ปัญหาเกิดซ้ำได้ ให้เรียก API และจำลองข้อผิดพลาด
502 Bad Gateway
- รอจนกว่าจะเกิดข้อผิดพลาด
- เลือกคำขอที่ล้มเหลว 1 รายการและตรวจสอบการติดตาม
- ไปยังระยะต่างๆ ของการติดตามและค้นหาตำแหน่งที่ความล้มเหลวเกิดขึ้น
โดยทั่วไปคุณจะเห็นข้อผิดพลาดนี้ในขั้นตอนที่ชื่อข้อผิดพลาดหลังจากช่วงคำขอที่ส่งไปยังเซิร์ฟเวอร์เป้าหมายดังที่แสดงด้านล่าง
จดค่าข้อผิดพลาดจากการติดตามดังนี้
- ข้อผิดพลาด:
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) ในการติดตาม แล้วคลิกเพื่อดูรายละเอียดที่เกี่ยวข้อง
โปรดสังเกตค่าของรายการต่อไปนี้
ส่วนหัวที่ผิดพลาด ค่า 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 ตรงกับค่าของ X-Apigee-fault-code ให้ระบุค่าของ X-Apigee-fault-codeตัวอย่างข้อผิดพลาด 502 จากบันทึกการเข้าถึง NGINX
ตัวอย่างรายการด้านบนจากบันทึกการเข้าถึง NGINX มีค่าต่อไปนี้สำหรับ X-Apigee-fault-code และ X-Apigee-fault-code
ส่วนหัวที่ผิดพลาด ค่า X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
สาเหตุ: ขนาดของส่วนหัวในการตอบกลับเกินขีดจํากัดที่อนุญาต
การวินิจฉัย
- กำหนดFault Code, Fault Source และขนาดเพย์โหลดการตอบกลับสำหรับข้อผิดพลาดที่สังเกตโดยใช้ API Monitoring, เครื่องมือ Trace หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ในขั้นตอนการวิเคราะห์ทั่วไป
- หาก Fault Source มีค่า
target
แสดงว่าการตอบกลับที่เซิร์ฟเวอร์ปลายทาง/แบ็กเอนด์ส่งไปยัง Apigee นั้นมีส่วนหัวที่มีขนาดมากกว่าขีดจำกัดที่อนุญาตใน Apigee Edge - คุณตรวจสอบได้ว่าการตอบกลับจากปลายทาง/แบ็กเอนด์มีส่วนหัวที่มีขนาดเกินขีดจํากัดที่อนุญาตได้โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
ข้อความแสดงข้อผิดพลาด
หากต้องการตรวจสอบโดยใช้ข้อความแสดงข้อผิดพลาด ให้ทำดังนี้
หากคุณมีสิทธิ์เข้าถึงข้อความแสดงข้อผิดพลาดทั้งหมดที่ได้รับจาก Apigee Edge โปรดดู
faultstring
faultstring
บ่งบอกว่าส่วนหัวการตอบกลับเกินขีดจำกัดที่อนุญาตตัวอย่างข้อความแสดงข้อผิดพลาด
"faultstring":"response headers size exceeding 25,600"
ในข้อความแสดงข้อผิดพลาดข้างต้น โปรดทราบใน
faultstring
ว่าการตอบกลับมีส่วนหัวที่มีขนาดโดยรวมเกินขีดจํากัดที่อนุญาตคำขอจริง
วิธีตรวจสอบโดยใช้คำขอจริง
หากคุณมีสิทธิ์เข้าถึงคำขอจริงที่ส่งไปยังเซิร์ฟเวอร์ปลายทาง/แบ็กเอนด์ ให้ทำตามขั้นตอนต่อไปนี้
- หากคุณเป็นผู้ใช้ Public Cloud/Private Cloud ให้ส่งคำขอไปยังเซิร์ฟเวอร์แบ็กเอนด์โดยตรงจากเซิร์ฟเวอร์แบ็กเอนด์เองหรือเครื่องอื่นที่คุณได้รับอนุญาตให้ส่งคำขอไปยังเซิร์ฟเวอร์แบ็กเอนด์
- หากคุณเป็นผู้ใช้ Private Cloud คุณจะส่งคำขอไปยังเซิร์ฟเวอร์แบ็กเอนด์จากผู้ประมวลผลข้อความตัวใดตัวหนึ่งได้ด้วย
- ตรวจสอบการตอบกลับที่ได้รับจากเซิร์ฟเวอร์แบ็กเอนด์และประมวลผลโดยเฉพาะ ตลอดจนยืนยันขนาดรวมของส่วนหัวที่ส่งผ่านในการตอบสนอง
หากคุณพบว่าขนาดของส่วนหัวในเปย์โหลดการตอบกลับเกินขีดจำกัดที่อนุญาตใน 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 Cloud คือ 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