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 sẽ nhận một mã trạng thái HTTP của 502 Bad Gateway với mã lỗi protocol.http.TooBigHeaders làm phản hồi cho lệnh gọi API.

Thông báo lỗi

Ứng dụng khách 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 tiêu đề do máy chủ đích/phụ trợ gửi tới Apigee Edge trong phản hồi HTTP lớn hơn giới hạn được cho phép trong Apigee Edge.

Dưới đây là một số nguyên nhân có thể gây ra lỗi này:

Nguyên nhân Nội dung mô tả Hướng dẫn khắc phục sự cố áp dụng cho
Kích thước tiêu đề 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ủ đích/phụ trợ gửi trong phản hồi HTTP tới Apigee Edge lớn hơn giới hạn được cho phép trong Apigee Edge. Người dùng Edge Public và Private Cloud

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à một 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 đề.

  3. Chuyển đến trang Phân tích > Giám sát API > Điều tra.
  4. Chọn khung thời gian cụ thể mà bạn quan sát 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 dựa trên Thời gian.
  7. Chọn một ô có mã lỗi protocol.http.TooBigHeaders như minh hoạ dưới đây:

    ( 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ư sau:

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

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

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

  10. Trong cửa sổ Logs (Nhật ký), hãy lưu ý những thông tin 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ị targetMã lỗi có giá trị protocol.http.TooBigHeaders, thì điều đó cho biết rằng phản hồi HTTP từ máy chủ đích/ máy chủ phụ trợ có các tiêu đề có kích thước lớn hơn giới hạn được cho phép trong Apigee Edge.

Công cụ theo dõi

  1. Bật tính năng theo dõi phiên 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 hiện 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 theo dõi và xác định vị trí xảy ra lỗi.
  4. Thông thường, bạn sẽ thấy lỗi này trong quy trình có tên Error (Lỗi) ngay sau giai đoạn Request sent to target server (Yêu cầu 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

    Điều này cho thấy rằng Apigee Edge (thành phần Trình xử lý thư) sẽ gửi lỗi 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 hồi Phản hồi gửi tới khách hàng do Apigee Edge gửi như minh hoạ bên dưới:

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

  6. Hãy 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 (Dữ liệu phân tích được ghi lại) trong dấu vết và nhấp vào giai đoạn đó để xem thông tin chi tiết 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ể 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 bằng giá trị thực tế.

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

    Ví dụ về lỗi 502 trong nhật ký truy cập NGINX:

    Mục mẫu ở trên từ nhật ký truy cập NGINX có các giá trị sau đây 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 phản hồi cho lỗi quan sát được bằng tính năng Giám sát API, Công cụ theo dõi hoặc nhật ký Truy cập NGINX như giải thích trong phần Các bước chẩn đoán phổ biến.
  2. Nếu Nguồn lỗi có giá trị target, thì tức là phản hồi do máy chủ đích/phụ trợ gửi tới Apigee có các tiêu đề có kích thước lớn hơn giới hạn được 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/phần phụ trợ có các tiêu đề có kích thước lớn hơn giới hạn cho phép bằng một trong các phương thức 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 truy cập vào thông báo lỗi đầy đủ mà Apigee nhận được từ Apigee, hãy tham khảo faultstring. faultstring cho biết kích thước tiêu đề phản hồi đã vượt quá giới hạn cho phép.

    Mẫu thông báo lỗi:

    "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ó cá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/phụ trợ, 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 đến máy chủ phụ trợ qua chính máy chủ phụ trợ hoặc bất kỳ máy nào khác mà bạn được phép gửi yêu cầu đến máy chủ phụ trợ.
    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 tới máy chủ phụ trợ qua một trong các Bộ xử lý thông báo.
    3. Kiểm tra phản hồi nhận được từ máy chủ phụ trợ và tính toán cụ thể, xác minh tổng kích thước của các tiêu đề được truyền trong phản hồi.
    4. Nếu bạn nhận thấy kích thước của tiêu đề trong tải trọng phản hồi vượt quá giới hạn được cho phép trong Apigee Edge, thì đó chính là nguyên nhân của vấn đề.

      Phản hồi mẫu từ máy chủ đích:

      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 gây ra lỗi này vì ứng dụng này vượt quá giới hạn cho phép trong Apigee Edge.

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

    Cách xác thực bằng nhật ký Trình xử lý thông báo:

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

    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ó lỗi 502 nào trong một khoảng thời gian cụ thể hay không (nếu vấn đề đã xảy ra trong quá khứ) hoặc có yêu cầu nào vẫn không thành công với 502 hay không. 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 đường từ system.log tương tự như sau. Kích thước tiêu đề phản hồi có thể thay đổi 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 Bộ xử lý thông báo nhận được phản hồi từ máy chủ phụ trợ/mục tiêu và nhận thấy tổng kích thước của các tiêu đề lớn hơn 25 KB, bộ xử lý sẽ dừng lại và gửi lỗi:

      response headers size exceeding 25,600

      Tức là Tổng kích thước tiêu đề lớn hơn 25 KB và Apigee sẽ gửi lỗi khi kích thước bắt đầu vượt quá giới hạn 25 KB với mã lỗi là protocol.http.TooBigHeaders

Độ phân giải

Cố định kích thước

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

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

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 một thuộc tính CwC để tăng giới hạn kích thước của tiêu đề Phản hồi. Để biết thông tin chi tiết, hãy xem phần Định cấu hình giới hạn cho Trình xử lý thư

Các giới hạn

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

  1. Nếu bạn là người dùng Cloud công khai, thì giới hạn tối đa cho kích thước của tiêu đề Yêu cầu và Phản hồi sẽ được ghi trong tài liệu về Kích thước tiêu đề yêu cầu/phản hồi trong phần Giới hạn API API.
  2. Nếu là người dùng Đám mây riêng tư , thì có thể bạn đã sửa đổi giới hạn 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ù bạn không nên dùng phương pháp này). 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 các hướng dẫn trong bài viết Cách kiểm tra giới hạn 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 rằng thuộc tính HTTPResponse.headers.limit đã được cập nhật với một giá trị mới trên Bộ xử lý thông báo.

  1. Trên máy xử lý thư, hãy tìm thuộc tính HTTPResponse.headers.limit trong thư mục /opt/apigee/edge-message-processor/conf rồi kiểm tra xem bạn đã thiết lập giá trị nào như đoạn mã 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ả ví dụ ở trên, hãy lưu ý rằng thuộc tính HTTPResponse.headers.limit đã được thiết lập bằng giá trị 25k trong http.properties.

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

Nếu bạn vẫn cần Nhóm hỗ trợ Apigee hỗ trợ, hãy truy cập trang 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 thông tin chẩn đoán sau đây, sau đó liên hệ với Bộ phận hỗ trợ API Apigee:

Nếu bạn là người dùng Public Cloud, 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 tạo lỗi 502
  • Tệp theo dõi cho các yêu cầu API
  • Hoàn tất đầu ra của phản hồi từ máy chủ đích/phụ trợ cùng với kích thước của tiêu đề

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

  • Đã phát hiệ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ành công
  • 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 tạo lỗi 502
  • Hoàn tất đầu ra của phản hồi từ máy chủ đích/phụ trợ cùng với kích thước của tiêu đề
  • 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 giá trị thực tế.

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