คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ 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
- ลงชื่อเข้าใช้ UI ของ Apigee Edge ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนไปใช้องค์กรที่ต้องการตรวจสอบปัญหา
- ไปที่หน้า Analyze > API Monitoring > Investigate
- เลือกกรอบเวลาที่เฉพาะเจาะจงซึ่งคุณพบข้อผิดพลาด
- คุณอาจเลือกตัวกรอง Proxy เพื่อจำกัดรหัสข้อผิดพลาด
- พล็อต Fault Code เทียบกับ Time
เลือกเซลล์ที่มีรหัสข้อผิดพลาด
protocol.http.TooBigHeadersดังที่ แสดงด้านล่าง
คุณจะเห็นข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
protocol.http.TooBigHeadersดังที่แสดงด้านล่าง
คลิกดูบันทึก แล้วขยายแถวสำหรับคำขอที่ไม่สำเร็จ
- จากหน้าต่างบันทึก ให้จดรายละเอียดต่อไปนี้
- รหัสสถานะ:
502 - แหล่งที่มาของข้อผิดพลาด:
target - รหัสข้อผิดพลาด:
protocol.http.TooBigHeaders
- รหัสสถานะ:
- หากแหล่งที่มาของข้อผิดพลาด มีค่าเป็น
targetและรหัสข้อผิดพลาด มีค่าเป็นprotocol.http.TooBigHeadersแสดงว่าการตอบกลับ HTTP จากเซิร์ฟเวอร์เป้าหมาย/ แบ็กเอนด์มีส่วนหัวที่มีขนาดมากกว่าขีดจำกัดที่อนุญาตใน Apigee Edge
เครื่องมือติดตาม
- เปิดใช้เซสชันการติดตาม
และทำอย่างใดอย่างหนึ่งต่อไปนี้:
- รอให้เกิดข้อผิดพลาด
502 Bad Gatewayหรือ - หากทำซ้ำปัญหาได้ ให้เรียก API และทำซ้ำ
502 Bad Gatewayข้อผิดพลาด
- รอให้เกิดข้อผิดพลาด
- เลือกคำขอที่ไม่สำเร็จรายการใดรายการหนึ่งแล้วตรวจสอบการติดตาม
- ดูขั้นตอนต่างๆ ของการติดตามและค้นหาตำแหน่งที่เกิดข้อผิดพลาด
โดยปกติคุณจะเห็นข้อผิดพลาดนี้ในโฟลว์ที่ชื่อว่า Error ทันทีหลังจากขั้นตอน Request sent to target server ดังที่แสดงด้านล่าง
จดค่าข้อผิดพลาดจากการติดตาม
- error:
response headers size exceeding 25,600 - error.class:
com.apigee.errors.http.server.BadGateway
ซึ่งบ่งชี้ว่า Apigee Edge (คอมโพเนนต์ Message Processor) แสดงข้อผิดพลาดทันทีที่ได้รับการตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์เนื่องจากขนาดส่วนหัวเกินขีดจำกัดที่อนุญาต
- error:
คุณจะเห็นข้อผิดพลาดในการตอบกลับข้อผิดพลาด 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.TooBigHeadersX-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-source:
ส่วนหัวของข้อผิดพลาด ค่า X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source target
สาเหตุ: ขนาดส่วนหัวในการตอบกลับมีขนาดมากกว่าขีดจำกัดที่อนุญาต
การวินิจฉัย
- กำหนด Fault Code, Fault Source และ Response Payload Size สำหรับ ข้อผิดพลาดที่พบโดยใช้การตรวจสอบ API, เครื่องมือติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวินิจฉัยที่พบบ่อย
- หากแหล่งที่มาของข้อผิดพลาด มีค่าเป็น
targetแสดงว่า การตอบกลับที่เซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์ส่งไปยัง Apigee มีส่วนหัวที่มีขนาดมากกว่า ขีดจำกัดที่ อนุญาตใน Apigee Edge - คุณตรวจสอบได้ว่าการตอบกลับจากเป้าหมาย/แบ็กเอนด์มีส่วนหัวที่มีขนาดมากกว่าขีดจำกัดที่อนุญาตโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้
ข้อความแสดงข้อผิดพลาด
วิธีตรวจสอบโดยใช้ข้อความแสดงข้อผิดพลาด
หากคุณมีสิทธิ์เข้าถึงข้อความแสดงข้อผิดพลาดทั้งหมดที่ได้รับจาก Apigee Edge ให้ ดู
faultstringfaultstringบ่งชี้ว่าขนาดส่วนหัวการตอบกลับเกินขีดจำกัดที่อนุญาตตัวอย่างข้อความแสดงข้อผิดพลาด
"faultstring":"response headers size exceeding 25,600"
ในข้อความแสดงข้อผิดพลาดข้างต้น ให้สังเกตใน
faultstringว่าการตอบกลับมีส่วนหัวที่มีขนาดทั้งหมดเกิน ขีดจำกัดที่อนุญาตคำขอจริง
วิธีตรวจสอบโดยใช้คำขอจริง
หากคุณมีสิทธิ์เข้าถึงคำขอจริงที่ส่งไปยังเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์ ให้ทำตามขั้นตอนต่อไปนี้
- หากคุณเป็นผู้ใช้ Public Cloud/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
บันทึกของ Message Processor
วิธีตรวจสอบโดยใช้บันทึกของ Message Processor
หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถใช้บันทึกของ Message Processor เพื่อ ตรวจสอบว่าขนาดส่วนหัวของการตอบกลับเกิน ขีดจำกัดที่อนุญาตใน Apigee Edge หรือไม่
ตรวจสอบบันทึกของ Message Processor
/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)
-
ทันทีที่ Message Processor ได้รับการตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์/เป้าหมาย และพบว่าขนาดทั้งหมดของส่วนหัวมีขนาดมากกว่า 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 ซึ่งช่วยให้เพิ่มขีดจำกัดขนาดส่วนหัวของการตอบกลับได้ ดูรายละเอียดได้ที่ การกำหนดขีดจำกัดสำหรับ Message Processor
จำกัดสูงสุด
Apigee คาดหวังว่าแอปพลิเคชันไคลเอ็นต์และเซิร์ฟเวอร์แบ็กเอนด์จะไม่ส่ง ส่วนหัวที่มีขนาดมากกว่าขีดจำกัดที่อนุญาตตามที่ระบุไว้ ในขนาดส่วนหัวของคำขอ/การตอบกลับใน ขีดจำกัดของ Apigee Edge
- หากคุณเป็นผู้ใช้ Public Cloud ขีดจำกัดสูงสุดสำหรับ ขนาดส่วนหัวของคำขอและการตอบกลับจะเป็นไปตามที่ระบุไว้ในขนาดส่วนหัวของคำขอ/การตอบกลับ ใน ขีดจำกัดของ Apigee Edge
- หากคุณเป็นผู้ใช้ Private Cloud คุณอาจแก้ไขขีดจำกัดสูงสุดเริ่มต้นสำหรับขนาดส่วนหัวของคำขอและการตอบกลับ (แม้ว่าจะไม่ใช่วิธีที่แนะนำ) คุณกำหนดขีดจำกัดขนาดส่วนหัวของการตอบกลับสูงสุดได้โดยทำตามวิธีการใน วิธีตรวจสอบขีดจำกัดปัจจุบัน
วิธีตรวจสอบขีดจำกัดปัจจุบัน
ส่วนนี้อธิบายวิธีตรวจสอบว่าพร็อพเพอร์ตี้ HTTPResponse.headers.limit ได้รับการอัปเดตด้วยค่าใหม่ใน Message Processor แล้ว
- ในเครื่อง Message Processor ให้ค้นหาพร็อพเพอร์ตี้
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
หากคุณเป็นผู้ใช้ Public Cloud โปรดระบุข้อมูลต่อไปนี้
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- ชื่อพร็อกซี API
- คำสั่ง
curlที่สมบูรณ์ซึ่งใช้ในการทำซ้ำข้อผิดพลาด502 - ไฟล์การติดตามสำหรับคำขอ API
- เอาต์พุตที่สมบูรณ์ของการตอบกลับจากเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์พร้อมขนาดส่วนหัว
หากคุณเป็นผู้ใช้ Private Cloud โปรดระบุข้อมูลต่อไปนี้
- ข้อความแสดงข้อผิดพลาดทั้งหมดที่พบสำหรับคำขอที่ไม่สำเร็จ
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- App Bundle ของพร็อกซี API
- ไฟล์การติดตามสำหรับคำขอ API ที่ไม่สำเร็จ
- คำสั่ง
curlที่สมบูรณ์ซึ่งใช้ในการทำซ้ำข้อผิดพลาด502 - เอาต์พุตที่สมบูรณ์ของการตอบกลับจากเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์พร้อมขนาดส่วนหัว
บันทึกการเข้าถึง 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