502 เกตเวย์ไม่ถูกต้อง - TooBigHeaders

คุณกำลังดูเอกสารประกอบ 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

  1. ลงชื่อเข้าใช้ Apigee Edge UI ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
  2. เปลี่ยนเป็นองค์กรที่ต้องการตรวจสอบปัญหา

  3. ไปที่ วิเคราะห์ > การตรวจสอบ API > หน้าตรวจสอบ
  4. เลือกกรอบเวลาที่คุณพบข้อผิดพลาด
  5. คุณอาจเลือกตัวกรองพร็อกซีเพื่อจำกัดรหัสข้อผิดพลาดให้แคบลง
  6. พล็อตรหัสข้อผิดพลาดเทียบกับเวลา
  7. เลือกเซลล์ที่มีรหัสข้อผิดพลาด protocol.http.TooBigHeaders เป็น แสดงอยู่ด้านล่าง

    ( ดูรูปภาพขนาดใหญ่ขึ้น)

  8. คุณจะเห็นข้อมูลเกี่ยวกับรหัสข้อผิดพลาด protocol.http.TooBigHeaders ตามที่แสดงด้านล่าง:

    ( ดูรูปภาพขนาดใหญ่ขึ้น)

  9. คลิก ดูบันทึก และขยายแถวสำหรับคำขอที่ล้มเหลว

    ( ดูรูปภาพขนาดใหญ่ขึ้น)

  10. จากหน้าต่าง Logs ให้จดรายละเอียดต่อไปนี้
    • รหัสสถานะ: 502
    • แหล่งที่มาของข้อผิดพลาด: target
    • รหัสข้อผิดพลาด: protocol.http.TooBigHeaders
  11. หากแหล่งที่มาของข้อผิดพลาดมีค่า target และข้อผิดพลาด Code มีค่า protocol.http.TooBigHeaders ซึ่งบ่งชี้ว่า การตอบกลับ HTTP จากเซิร์ฟเวอร์เป้าหมาย/ เซิร์ฟเวอร์แบ็กเอนด์มีส่วนหัวที่มีขนาดใหญ่กว่า เกินขีดจำกัดที่อนุญาตใน Apigee Edge

เครื่องมือการติดตาม

  1. เปิดใช้เซสชันการติดตาม และเลือกระหว่าง
    1. รอให้ข้อผิดพลาด 502 Bad Gateway เกิดขึ้น หรือ
    2. หากคุณทำให้เกิดปัญหาซ้ำได้ ให้เรียก API และทำให้เกิดข้อผิดพลาด 502 Bad Gateway ซ้ำ
  2. เลือกคำขอที่ไม่สำเร็จรายการหนึ่งและตรวจสอบการติดตาม
  3. ไปยังส่วนต่างๆ ของการติดตามและค้นหาตำแหน่งที่ล้มเหลว เกิดขึ้น
  4. โดยปกติแล้วคุณจะเห็นข้อผิดพลาดนี้ในขั้นตอนที่มีชื่อว่า Error (ข้อผิดพลาด) หลัง ระยะส่งคำขอไปยังเซิร์ฟเวอร์เป้าหมายดังที่แสดงด้านล่าง

    ( ดูรูปภาพขนาดใหญ่ขึ้น)

    บันทึกค่าของข้อผิดพลาดจากการติดตามดังนี้

    • ข้อผิดพลาด: response headers size exceeding 25,600
    • error.class: com.apigee.errors.http.server.BadGateway

    นี่เป็นการระบุว่า Apigee Edge (คอมโพเนนต์ตัวประมวลผลข้อความ) แสดงข้อผิดพลาดเนื่องจาก ทันทีที่ได้รับการตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์เนื่องจากส่วนหัวมีขนาด เกินขีดจำกัดที่อนุญาต

  5. คุณจะเห็นข้อผิดพลาดใน Response Sent to Client การตอบกลับข้อผิดพลาดที่ส่งโดย Apigee Edge ดังที่แสดงด้านล่าง

    ( ดูรูปภาพขนาดใหญ่ขึ้น)

  6. จดค่าของข้อผิดพลาดจากการติดตาม การติดตามตัวอย่างข้างต้นแสดงสิ่งต่อไปนี้
    • ข้อผิดพลาด: 502 Bad Gateway
    • เนื้อหาข้อผิดพลาด: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. ไปยังช่วง 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

  1. หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถใช้บันทึกการเข้าถึง NGINX เพื่อ ระบุข้อมูลสำคัญเกี่ยวกับ HTTP 502 Bad Gateway
  2. ตรวจสอบบันทึกการเข้าถึง NGINX ดังต่อไปนี้

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    ที่ไหน: ระบบจะแทนที่ ORG, ENV และ PORT# ด้วยค่าจริง

  3. ค้นหาเพื่อดูว่ามีข้อผิดพลาด 502 รายการไหม มีรหัสข้อผิดพลาด protocol.http.TooBigHeaders ในช่วงเวลาที่ระบุ (หากเคยมีปัญหาเกิดขึ้นในอดีต) หรือหากมีคำขอที่ยังคงดำเนินการไม่สำเร็จ 502
  4. หากคุณพบข้อผิดพลาด 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

สาเหตุ: ส่วนหัวในการตอบกลับมีขนาดเกินขีดจำกัดที่อนุญาต

การวินิจฉัย

  1. กำหนดรหัสข้อผิดพลาด แหล่งที่มาของข้อผิดพลาด และขนาดเพย์โหลดการตอบกลับสำหรับองค์ประกอบ ข้อผิดพลาดที่พบในการใช้การตรวจสอบ API, เครื่องมือติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป
  2. หากแหล่งที่มาของข้อผิดพลาดมีค่า target ค่านี้หมายความว่า การตอบสนองที่เซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์ส่งไปยัง Apigee มีส่วนหัวมีขนาดใหญ่กว่า เกินขีดจำกัดที่อนุญาตใน Apigee Edge
  3. คุณตรวจสอบได้ว่าการตอบกลับจากเป้าหมาย/แบ็กเอนด์มีส่วนหัวที่มีขนาดเท่ากับ มากกว่าขีดจำกัดที่อนุญาตโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้

    ข้อความแสดงข้อผิดพลาด

    หากต้องการตรวจสอบโดยใช้ข้อความแสดงข้อผิดพลาด ให้ทำดังนี้

    หากคุณมีสิทธิ์เข้าถึงข้อความแสดงข้อผิดพลาดทั้งหมดที่ได้รับจาก Apigee Edge โปรดดูที่ faultstring faultstring ระบุว่า ส่วนหัวการตอบกลับมีขนาดเกินขีดจำกัดที่อนุญาต

    ตัวอย่างข้อความแสดงข้อผิดพลาด

    "faultstring":"response headers size exceeding 25,600"
    

    ในข้อความแสดงข้อผิดพลาดข้างต้น หมายเหตุในfaultstringว่า การตอบกลับมีส่วนหัวที่มีขนาดโดยรวมเกินขีดจำกัดที่อนุญาต

    คำขอจริง

    วิธีตรวจสอบโดยใช้คำขอจริงมีดังนี้

    หากคุณมีสิทธิ์เข้าถึงคำขอจริงที่ส่งไปยังเซิร์ฟเวอร์เป้าหมาย/แบ็กเอนด์ จากนั้นให้ทำตามขั้นตอนต่อไปนี้

    1. หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ/Private Cloud ให้ส่งคำขอ ไปยังเซิร์ฟเวอร์แบ็กเอนด์โดยตรง จากเซิร์ฟเวอร์แบ็กเอนด์เองหรือเซิร์ฟเวอร์อื่นๆ เครื่องที่คุณได้รับอนุญาตให้ส่งคำขอไปยังแบ็กเอนด์ เซิร์ฟเวอร์
    2. หากคุณเป็นผู้ใช้ Private Cloud คุณยังสามารถส่งคำขอเพื่อ เซิร์ฟเวอร์แบ็กเอนด์จากหนึ่งใน Message Processor
    3. ตรวจสอบการตอบกลับที่ได้รับจากเซิร์ฟเวอร์แบ็กเอนด์ ประมวลผลและยืนยันขนาดโดยรวมของส่วนหัวที่ส่งไปในคำตอบ
    4. ถ้าคุณพบว่าขนาดของส่วนหัวในเพย์โหลดการตอบกลับ เกินขีดจำกัดที่อนุญาตใน 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

    1. ตรวจสอบบันทึกของตัวประมวลผลข้อความดังนี้

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. ค้นหาว่ามีข้อผิดพลาด 502 ในระหว่าง ระยะเวลา (หากปัญหาเกิดขึ้นในอดีต) หรือมีคำขอ ยังคงล้มเหลวกับ 502 คุณใช้สตริงการค้นหาต่อไปนี้ได้
      grep -ri "response headers size exceeding"
      
    3. คุณจะพบเส้นทางจาก 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)
      
    4. ทันทีที่ตัวประมวลผลข้อความได้รับการตอบกลับจากแบ็กเอนด์/เป้าหมาย และพบว่าส่วนหัวทั้งหมดมีขนาดใหญ่กว่า 25 KB จะหยุดและแสดงข้อผิดพลาด

      response headers size exceeding 25,600

      โดยบอกเป็นนัยว่าขนาดส่วนหัวทั้งหมดมากกว่า 25 KB และ Apigee แสดงข้อผิดพลาดเมื่อขนาดเริ่มเกินขีดจำกัด 25 KB ที่มีรหัสข้อผิดพลาด ด้วยชื่อ protocol.http.TooBigHeaders

ความละเอียด

แก้ไขขนาด

ตัวเลือกที่ 1 [แนะนำ]: แก้ไขแอปพลิเคชันเซิร์ฟเวอร์เป้าหมายไม่ให้ส่งขนาดส่วนหัว เกินขีดจำกัด Apigee

  1. วิเคราะห์สาเหตุที่เซิร์ฟเวอร์เป้าหมายบางรายการส่งขนาดส่วนหัวการตอบกลับมากขึ้น มากกว่าขีดจำกัดที่อนุญาตตามที่ระบุไว้ในขีดจำกัด
  2. ถ้าไม่เป็นที่ต้องการ ให้แก้ไขแอปพลิเคชันเซิร์ฟเวอร์แบ็กเอนด์เพื่อให้ส่ง ส่วนหัวการตอบกลับที่มีขนาดต่ำกว่า ขีดจำกัดที่อนุญาตใน Apigee Edge
  3. ตรวจสอบว่าสามารถส่งข้อมูลส่วนหัวโดยเป็นส่วนหนึ่งของเนื้อหาการตอบกลับได้หรือไม่
  4. หากเป็นไปได้ ให้ส่งข้อมูลขนาดใหญ่ที่คุณวางแผนจะส่ง ส่วนหัวในเนื้อหาการตอบสนอง ซึ่งจะช่วยให้แน่ใจว่าคุณจะไม่ตอบกลับ ขีดจำกัดส่วนหัว

CwC

ตัวเลือกที่ 2 : ใช้พร็อพเพอร์ตี้ CwC เพื่อเพิ่มขีดจำกัดขนาดส่วนหัวการตอบกลับ

Apigee จะมอบ พร็อพเพอร์ตี้ CwC ที่ช่วยให้เพิ่มขีดจำกัดขนาดส่วนหัวการตอบกลับได้ โปรดดูรายละเอียดที่ การกำหนดค่าขีดจำกัดสำหรับตัวประมวลผลข้อความ

จำกัดสูงสุด

Apigee คาดว่าแอปพลิเคชันไคลเอ็นต์และเซิร์ฟเวอร์แบ็กเอนด์จะไม่ส่ง ส่วนหัวมีขนาดเกินขีดจำกัดที่อนุญาตตามที่แสดงไว้ในเอกสาร สำหรับขนาดส่วนหัวของคำขอ/การตอบกลับใน ขีดจำกัด Apigee Edge

  1. หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ ขีดจำกัดสูงสุดสำหรับ ขนาดส่วนหัวของคำขอและส่วนหัวการตอบกลับเป็นไปตามเอกสารสำหรับขนาดส่วนหัวของคำขอ/การตอบกลับใน ขีดจำกัด Apigee Edge
  2. หากคุณเป็นผู้ใช้ Private Cloud คุณอาจได้แก้ไขขีดจำกัดสูงสุดเริ่มต้น ขีดจำกัดสำหรับขนาดของส่วนหัวคำขอและส่วนหัวการตอบกลับ (แม้ว่าจะไม่ใช่แนวทางปฏิบัติที่แนะนำก็ตาม) คุณสามารถกำหนดขนาดสูงสุดของส่วนหัวการตอบกลับได้โดยทำตามวิธีการใน วิธีตรวจสอบขีดจำกัดปัจจุบัน

วิธีตรวจสอบขีดจำกัดปัจจุบัน

ส่วนนี้จะอธิบายวิธียืนยันว่าพร็อพเพอร์ตี้ HTTPResponse.headers.limit มี อัปเดตเป็นค่าใหม่ให้กับตัวประมวลผลข้อความแล้ว

  1. ค้นหาคุณสมบัติในเครื่องประมวลผลข้อความ HTTPResponse.headers.limit ในช่วง ไดเรกทอรี /opt/apigee/edge-message-processor/conf และตรวจสอบเพื่อ ให้ดูค่าที่ตั้งไว้ตามที่แสดงด้านล่าง
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. ตัวอย่างผลลัพธ์จากคำสั่งด้านบนมีดังนี้
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
    
  3. ในตัวอย่างเอาต์พุตด้านบน โปรดทราบว่าพร็อพเพอร์ตี้ 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