502 Bad Gateway - TooBigHeaders

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến Tài liệu về Apigee X.
thông tin

Triệu chứng

Ứng dụng khách sẽ nhận được mã trạng thái HTTP 502 Bad Gateway kèm theo mã lỗi protocol.http.TooBigHeaders làm phản hồi cho API cuộc gọi.

Thông báo lỗi

Ứng dụng sẽ nhận được mã phản hồi sau đây:

HTTP/1.1 502 Bad Gateway

Ngoài ra, bạn có thể nhận thấy thông báo lỗi sau:

{
   "fault":{
      "faultstring":"response headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

Các nguyên nhân có thể

Lỗi này xảy ra nếu tổng kích thước của các tiêu đề do mục tiêu/máy chủ phụ trợ gửi máy chủ đến Apigee Edge như một phần của phản hồi HTTP lớn hơn mức cho phép giới hạn được phép trong Apigee Edge.

Dưới đây là những nguyên nhân có thể gây ra lỗi này:

Nguyên nhân Mô tả Hướng dẫn khắc phục sự cố áp dụng cho
Kích thước của phần thông tin trong phản hồi lớn hơn giới hạn cho phép Kích thước tiêu đề của một tiêu đề cụ thể hoặc tổng kích thước tiêu đề của tất cả tiêu đề do máy chủ mục tiêu/phụ trợ gửi trong quá trình phản hồi HTTP cho Apigee Edge vượt quá giới hạn cho phép trong Apigee Edge. Người dùng Edge công khai và riêng tư

Các bước chẩn đoán phổ biến

Hãy sử dụng một trong các công cụ/kỹ thuật sau để chẩn đoán lỗi này:

Giám sát API

Cách chẩn đoán lỗi bằng tính năng Giám sát API:

  1. Đăng nhập vào giao diện người dùng Apigee Edge với tư cách là người dùng có vai trò thích hợp.
  2. Chuyển sang tổ chức mà bạn muốn điều tra vấn đề này.

  3. Chuyển đến thẻ Analyze (Phân tích) > Giám sát API > Điều tra.
  4. Chọn khung thời gian cụ thể mà bạn phát hiện thấy lỗi.
  5. Bạn có thể chọn bộ lọc Proxy để thu hẹp mã lỗi.
  6. Vẽ Mã lỗi theo Thời gian.
  7. Chọn một ô có mã lỗi protocol.http.TooBigHeaders là được hiển thị bên dưới:

    ( xem hình ảnh lớn hơn)

  8. Bạn sẽ thấy thông tin về mã lỗi protocol.http.TooBigHeaders như minh hoạ dưới đây:

    ( xem hình ảnh lớn hơn)

  9. Nhấp vào Xem nhật ký và mở rộng hàng của yêu cầu không thành công.

    ( xem hình ảnh lớn hơn)

  10. Từ cửa sổ Logs (Nhật ký), hãy lưu ý những thông tin chi tiết sau:
    • Mã trạng thái: 502
    • Nguồn lỗi: target
    • Mã lỗi: protocol.http.TooBigHeaders.
  11. Nếu Nguồn lỗi có giá trị targetLỗi Mã có giá trị protocol.http.TooBigHeaders, sau đó điều đó cho biết rằng phản hồi HTTP từ máy chủ mục tiêu/ phụ trợ có các tiêu đề có kích thước lớn hơn vượt quá giới hạn cho phép trong Apigee Edge.

Công cụ theo dõi

  1. Bật phiên theo dõi và:
    1. Chờ lỗi 502 Bad Gateway xảy ra, hoặc
    2. Nếu bạn có thể tái hiện vấn đề, hãy thực hiện lệnh gọi API và tái tạo lỗi 502 Bad Gateway.
  2. Chọn một trong các yêu cầu không thành công rồi kiểm tra dấu vết.
  3. Di chuyển qua các giai đoạn của quá trình theo dõi và xác định vị trí lỗi đã xảy ra.
  4. Thông thường, bạn sẽ thấy lỗi này trong quy trình có tên Error ngay sau Giai đoạn Yêu cầu được gửi đến máy chủ mục tiêu như minh hoạ dưới đây:

    ( xem hình ảnh lớn hơn)

    Lưu ý các giá trị của lỗi trong dấu vết:

    • lỗi: response headers size exceeding 25,600
    • error.class: com.apigee.errors.http.server.BadGateway

    Mã này cho biết rằng Apigee Edge (thành phần Trình xử lý tin nhắn) sẽ gửi lỗi dưới dạng ngay khi nhận được phản hồi từ máy chủ phụ trợ do kích thước tiêu đề vượt quá giới hạn cho phép.

  5. Bạn sẽ thấy lỗi trong phần Phản hồi đã gửi cho ứng dụng phản hồi lỗi do Apigee Edge gửi như sau:

    ( xem hình ảnh lớn hơn)

  6. Ghi lại các giá trị của lỗi trong dấu vết. Dấu vết mẫu ở trên cho thấy:
    • Lỗi: 502 Bad Gateway.
    • Nội dung lỗi: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. Chuyển đến giai đoạn AX (Đã ghi dữ liệu Analytics) trong dấu vết rồi nhấp vào đó để xem thông tin chi tiết có liên quan.

    ( xem hình ảnh lớn hơn)

    Hãy lưu ý giá trị của các tham số sau:

    Tiêu đề lỗi Giá trị
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target
    Nội dung lỗi: Nội dung {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}

NGINX

Cách chẩn đoán lỗi bằng nhật ký truy cập NGINX:

  1. Nếu là người dùng Đám mây riêng tư, bạn có thể sử dụng nhật ký truy cập NGINX để xác định thông tin chính về HTTP 502 Bad Gateway.
  2. Kiểm tra nhật ký truy cập NGINX:

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

    Trong đó: ORG, ENVPORT# được thay thế bằng các giá trị thực tế.

  3. Tìm kiếm xem có lỗi 502 nào không với mã lỗi protocol.http.TooBigHeaders trong một khoảng thời gian cụ thể (nếu sự cố đã xảy ra trong quá khứ) hoặc nếu có bất kỳ yêu cầu nào vẫn không thành công với 502.
  4. Nếu bạn tìm thấy bất kỳ lỗi 502 nào với mã X-Apigee-fault-code khớp với giá trị của protocol.http.TooBigHeaders, sau đó xác định giá trị của X-Apigee-fault-source.

    Lỗi 502 mẫu trong nhật ký truy cập NGINX:

    Mục nhập mẫu ở trên từ nhật ký truy cập NGINX có các giá trị sau cho X-Apigee-fault-code X-Apigee-fault-code

    Tiêu đề lỗi Giá trị
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target

Nguyên nhân: Kích thước của tiêu đề trong phản hồi lớn hơn giới hạn cho phép

Chẩn đoán

  1. Xác định Mã lỗi, Nguồn lỗiKích thước tải trọng của phản hồi cho lỗi phát hiện được khi sử dụng nhật ký Giám sát API, công cụ Theo dõi hoặc nhật ký Truy cập NGINX như được giải thích trong Các bước chẩn đoán thường gặp.
  2. Nếu Nguồn lỗi có giá trị target, thì đường dẫn này cho biết rằng phản hồi do máy chủ mục tiêu/phụ trợ gửi cho Apigee có tiêu đề có kích thước lớn hơn vượt quá giới hạn cho phép trong Apigee Edge.
  3. Bạn có thể xác thực rằng phản hồi từ mục tiêu/máy chủ phụ trợ có các tiêu đề có kích thước là lớn hơn giới hạn cho phép bằng một trong các phương pháp sau:

    Thông báo lỗi

    Cách xác thực bằng thông báo lỗi:

    Nếu bạn có quyền xem thông báo lỗi hoàn chỉnh nhận được từ Apigee Edge, thì tham khảo faultstring. faultstring cho biết rằng kích thước tiêu đề phản hồi đã vượt quá giới hạn cho phép.

    Thông báo lỗi mẫu:

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

    Trong thông báo lỗi ở trên, hãy lưu ý trong faultstring rằng phản hồi có tiêu đề có tổng kích thước vượt quá giới hạn cho phép.

    Yêu cầu thực tế

    Cách xác thực bằng yêu cầu thực tế:

    Nếu bạn có quyền truy cập vào yêu cầu thực tế được gửi đến máy chủ đích/máy chủ phụ trợ, thì hãy thực hiện các bước sau:

    1. Nếu bạn là người dùng Đám mây công cộng/Đám mây riêng tư, hãy gửi yêu cầu trực tiếp tới máy chủ phụ trợ từ chính máy chủ phụ trợ đó hoặc từ bất kỳ máy chủ nào khác máy từ nơi bạn được phép đưa ra yêu cầu đến phần phụ trợ máy chủ.
    2. Nếu là người dùng Đám mây riêng tư, bạn cũng có thể gửi yêu cầu để máy chủ phụ trợ từ một trong các Bộ xử lý thư.
    3. Kiểm tra phản hồi nhận được từ máy chủ phụ trợ và cụ thể tính toán và xác minh tổng kích thước của các tiêu đề được chuyển trong phản hồi.
    4. Nếu bạn nhận thấy kích thước của các tiêu đề trong tải trọng phản hồi vượt quá giới hạn cho phép trong Apigee Edge, thì đó là nguyên nhân của vấn đề.

      Phản hồi mẫu từ máy chủ mục tiêu:

      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
      

      Trong ví dụ trên, Testheader1Testheader2 có kích thước cao hơn, đây là nguyên nhân đối với lỗi này vì nó vượt quá giới hạn cho phép trong Ứng dụng Apigee Edge.

    Nhật ký Trình xử lý thư

    Để xác thực bằng nhật ký Trình xử lý thư:

    Nếu là người dùng Đám mây riêng tư thì bạn có thể sử dụng nhật ký của Trình xử lý thư để xác thực xem kích thước tiêu đề Phản hồi có vượt quá kích thước giới hạn được phép trong Apigee Edge.

    1. Kiểm tra nhật ký Trình xử lý thư:

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

    2. Tìm kiếm xem có bất kỳ lỗi 502 nào trong một khoảng thời gian cụ thể hay không khoảng thời gian (nếu vấn đề đã xảy ra trong quá khứ) hoặc liệu có bất kỳ yêu cầu nào vẫn không thành công với 502. Bạn có thể sử dụng chuỗi tìm kiếm sau:
      grep -ri "response headers size exceeding"
      
    3. Bạn sẽ thấy các dòng từ system.log tương tự như sau. Kích thước tiêu đề phản hồi có thể khác nhau trong trường hợp của bạn:
      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. Ngay khi Trình xử lý thông báo nhận được phản hồi từ phần phụ trợ/mục tiêu máy chủ và thấy rằng tổng kích thước của các tiêu đề lớn hơn 25 KB, trình duyệt sẽ dừng và gửi lỗi:

      response headers size exceeding 25,600

      Điều này có nghĩa là Tổng kích thước tiêu đề là lớn hơn 25 KB và Apigee gửi lỗi khi kích thước bắt đầu vượt quá giới hạn 25 KB kèm theo mã lỗi dưới tên protocol.http.TooBigHeaders

Độ phân giải

Khắc phục kích thước

Lựa chọn 1 [Nên dùng]: Khắc phục ứng dụng máy chủ đích không gửi kích thước tiêu đề vượt quá giới hạn Apigee

  1. Phân tích lý do khiến máy chủ mục tiêu cụ thể gửi thêm kích thước tiêu đề phản hồi giới hạn cho phép như được xác định trong Giới hạn.
  2. Nếu bạn không mong muốn, hãy sửa đổi ứng dụng máy chủ phụ trợ của bạn để ứng dụng đó gửi tiêu đề Phản hồi có kích thước nhỏ hơn giới hạn cho phép trong Ứng dụng Apigee Edge.
  3. Kiểm tra xem có thể gửi thông tin tiêu đề trong nội dung phản hồi hay không.
  4. Nếu có thể, hãy gửi bất kỳ thông tin lớn nào mà bạn dự định gửi dưới dạng một phần của tiêu đề trong nội dung phản hồi. Việc này giúp đảm bảo rằng bạn sẽ không vượt quá số lượng câu trả lời giới hạn tiêu đề.

CwC

Lựa chọn 2 : Sử dụng thuộc tính CwC để tăng giới hạn kích thước tiêu đề phản hồi

Apigee cung cấp Thuộc tính CwC cho phép tăng giới hạn kích thước của tiêu đề Phản hồi. Để biết chi tiết, hãy xem Định cấu hình giới hạn cho Trình xử lý thư

Giới hạn

Apigee dự kiến ứng dụng khách và máy chủ phụ trợ sẽ không gửi kích thước tiêu đề lớn hơn giới hạn cho phép như trong tài liệu đối với Kích thước tiêu đề Yêu cầu/Phản hồi trong Giới hạn Apigee Edge.

  1. Nếu bạn là người dùng Cloud Public, thì giới hạn tối đa cho Kích thước tiêu đề Yêu cầu và Phản hồi như được ghi trong Kích thước tiêu đề yêu cầu/phản hồi trong Các giới hạn của Apigee Edge.
  2. Nếu là người dùng Đám mây riêng tư , thì bạn có thể đã sửa đổi mức tối đa mặc định cho kích thước của tiêu đề Yêu cầu và Phản hồi (mặc dù đây không phải là phương pháp nên dùng). Bạn có thể xác định giới hạn kích thước tối đa của Tiêu đề phản hồi bằng cách làm theo hướng dẫn trong Cách kiểm tra hạn mức hiện tại.

Cách kiểm tra hạn mức hiện tại?

Phần này giải thích cách xác minh thuộc tính HTTPResponse.headers.limit có đã được cập nhật một giá trị mới trên Trình xử lý thư.

  1. Trên máy Xử lý thư, hãy tìm kiếm thuộc tính HTTPResponse.headers.limit trong Thư mục /opt/apigee/edge-message-processor/conf và kiểm tra để hãy xem giá trị nào đã được đặt như minh hoạ bên dưới:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Kết quả mẫu từ lệnh trên như sau:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
    
  3. Trong kết quả của ví dụ ở trên, hãy lưu ý rằng thuộc tính HTTPResponse.headers.limit đã được thiết lập với giá trị 25k trong http.properties.

    Mã này cho biết giới hạn về kích thước tải trọng Phản hồi được định cấu hình trong Apigee cho Riêng tư Đám mây là 25 KB.

Nếu bạn vẫn cần hỗ trợ từ Nhóm hỗ trợ Apigee, hãy truy cập vào Phải thu thập thông tin chẩn đoán.

Phải thu thập thông tin chẩn đoán

Thu thập những thông tin chẩn đoán sau đây rồi liên hệ với Bộ phận hỗ trợ Apigee Edge:

Nếu bạn là người dùng Cloud Public, hãy cung cấp những thông tin sau:

  • Tên tổ chức
  • Tên môi trường
  • Tên proxy API
  • Hoàn tất lệnh curl dùng để tái hiện lỗi 502
  • Tệp theo dõi cho các yêu cầu API
  • Hoàn thành đầu ra phản hồi từ máy chủ đích/máy chủ phụ trợ cùng với kích thước của các tiêu đề

Nếu bạn là người dùng Đám mây riêng tư, hãy cung cấp các thông tin sau:

  • Đã nhận thấy thông báo lỗi hoàn chỉnh đối với các yêu cầu không thực hiện được
  • Tên tổ chức
  • Tên môi trường
  • Gói Proxy API
  • Tệp theo dõi cho các yêu cầu API không thành công
  • Hoàn tất lệnh curl dùng để tái hiện lỗi 502
  • Hoàn thành đầu ra phản hồi từ máy chủ đích/máy chủ phụ trợ cùng với kích thước của các tiêu đề
  • Nhật ký truy cập NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Vị trí: ORG, ENVPORT# được thay thế bằng giá trị thực tế.

  • Nhật ký hệ thống của Trình xử lý thư /opt/apigee/var/log/edge-message-processor/logs/system.log