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

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

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

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

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

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

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

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

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

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

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

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

  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-source:

    ส่วนหัวของข้อผิดพลาด ค่า
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target

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

การวินิจฉัย

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

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

    วิธีตรวจสอบโดยใช้ข้อความแสดงข้อผิดพลาด

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

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

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

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

    คำขอจริง

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

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

    1. หากคุณเป็นผู้ใช้ Public Cloud/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

    บันทึกของ Message Processor

    วิธีตรวจสอบโดยใช้บันทึกของ Message Processor

    หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถใช้บันทึกของ Message Processor เพื่อ ตรวจสอบว่าขนาดส่วนหัวของการตอบกลับเกิน ขีดจำกัดที่อนุญาตใน Apigee Edge หรือไม่

    1. ตรวจสอบบันทึกของ Message Processor

      /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. ทันทีที่ Message Processor ได้รับการตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์/เป้าหมาย และพบว่าขนาดทั้งหมดของส่วนหัวมีขนาดมากกว่า 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 ซึ่งช่วยให้เพิ่มขีดจำกัดขนาดส่วนหัวของการตอบกลับได้ ดูรายละเอียดได้ที่ การกำหนดขีดจำกัดสำหรับ Message Processor

จำกัดสูงสุด

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

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

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

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

  1. ในเครื่อง Message Processor ให้ค้นหาพร็อพเพอร์ตี้ 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 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