Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào
tài liệu Apigee X. thông tin
Dấu hiệu
Ứng dụng khách nhận được mã trạng thái HTTP 502 Bad Gateway với mã lỗi protocol.http.TooBigHeaders làm phản hồi cho các 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:
HTTP/1.1 502 Bad Gateway
Ngoài ra, bạn có thể 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áy chủ đích/phụ trợ gửi đến Apigee Edge trong phản hồi HTTP lớn hơn giới hạn cho phép trong Apigee Edge.
Sau đâ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 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ả các tiêu đề do máy chủ đích/phụ trợ gửi trong phản hồi HTTP đến Apigee Edge lớn hơn giới hạn cho phép trong Apigee Edge. | Người dùng Edge Public Cloud và Private Cloud |
Các bước chẩn đoán thường gặp
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:
- Đă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ò phù hợp.
Chuyển sang tổ chức mà bạn muốn điều tra vấn đề.
- Chuyển đến trang Phân tích > Giám sát API > Điều tra.
- Chọn khung thời gian cụ thể mà bạn nhận thấy lỗi.
- Bạn có thể chọn bộ lọc Proxy để thu hẹp phạm vi mã lỗi.
- Vẽ Mã lỗi theo Thời gian.
Chọn một ô có mã lỗi
protocol.http.TooBigHeadersnhư minh hoạ bên dưới:
Bạn sẽ thấy thông tin về mã lỗi
protocol.http.TooBigHeadersnhư minh hoạ dưới đây:
Nhấp vào Xem nhật ký rồi mở rộng hàng của yêu cầu không thực hiện được.
- Trong cửa sổ 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.
- Mã trạng thái:
- Nếu Nguồn lỗi có giá trị
targetvà Mã 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/ phụ trợ có các tiêu đề có kích thước lớn hơn giới hạn cho phép trong Apigee Edge.
Công cụ theo dõi
- Bật phiên theo dõi và một trong hai lựa chọn sau:
- Chờ lỗi
502 Bad Gatewayxảy ra, hoặc - 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.
- Chờ lỗi
- Chọn một trong các yêu cầu không thực hiện được và kiểm tra dấu vết.
- Điều hướng qua các giai đoạn khác nhau của dấu vết và xác định vị trí xảy ra lỗi.
Thông thường, bạn sẽ thấy lỗi này trong luồng có tên là Error (Lỗi) ngay sau giai đoạn Request sent to target server (Yêu cầu được gửi đến máy chủ đích) như minh hoạ bên dưới:
Ghi lại các giá trị của lỗi trong dấu vết:
- error:
response headers size exceeding 25,600 - error.class:
com.apigee.errors.http.server.BadGateway
Điều này cho biết Apigee Edge (thành phần Trình xử lý thông báo) 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.
- error:
Bạn sẽ thấy lỗi trong phản hồi lỗi Response Sent to Client (Phản hồi gửi đến máy khách) do Apigee Edge gửi như minh hoạ dưới đây:
- Lưu ý 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"}}}
- Lỗi:
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.
Lưu ý giá trị của những mục sau:
Tiêu đề lỗi Giá trị X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source targetNội dung lỗi: Phần 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:
- Nếu là người dùng Đám mây riêng, 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. Kiểm tra nhật ký truy cập NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logVị trí: ORG, ENV và PORT# được thay thế bằng các giá trị thực tế.
- Tìm xem có lỗi
502nào với mã lỗiprotocol.http.TooBigHeaderstrong một khoảng thời gian cụ thể (nếu vấn đề xảy ra trong quá khứ) hay có yêu cầu nào vẫn không thành công với502hay không. Nếu bạn thấy bất kỳ lỗi
502nào có X-Apigee-fault-code khớp với giá trị củaprotocol.http.TooBigHeaders, hãy xác định giá trị của X-Apigee-fault-source.Ví dụ về lỗi 502 trong nhật ký truy cập NGINX:
Mục nhập mẫu ở trên trong nhật ký truy cập NGINX có các giá trị sau cho X-Apigee-fault-code và X-Apigee-fault-source:
Tiêu đề lỗi Giá trị X-Apigee-fault-code protocol.http.TooBigHeadersX-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
- Xác định Mã lỗi, Nguồn lỗi và Kích thước tải trọng phản hồi cho lỗi quan sát được bằng cách sử dụ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ư được giải thích trong phần Các bước chẩn đoán thường gặp.
- Nếu Nguồn lỗi có giá trị
target, thì điều này cho biết rằng phản hồi do máy chủ đích/phụ trợ gửi đến Apigee có các tiêu đề có kích thước lớn hơn giới hạn cho phép trong Apigee Edge. - Bạn có thể xác thực rằng phản hồi từ đích đế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 hoàn chỉnh nhận được từ Apigee Edge, hãy tham khảo
faultstring.faultstringcho biết 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 ý rằng trong
faultstring, 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:
- Nếu bạn là người dùng Đám mây công khai/Đám mây riêng tư, hãy gửi yêu cầu trực tiếp đến máy chủ phụ trợ từ 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ợ.
- 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 đến máy chủ phụ trợ từ một trong các Trình xử lý thông báo.
- Kiểm tra phản hồi nhận được từ máy chủ phụ trợ và đặc biệt là tính toán cũng như xác minh tổng kích thước của các tiêu đề được truyền trong phản hồi.
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 lớn hơn giới hạn cho phép trong Apigee Edge, thì đó là nguyên nhân gây ra 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 intactTrong ví dụ trên,
Testheader1vàTestheader2có kích thước lớn hơn. Đây là nguyên nhân gây ra lỗi này vì kích thước vượt quá giới hạn cho phép trong Apigee Edge.
Nhật ký Trình xử lý tin nhắn
Cách xác thực bằng nhật ký Message Processor:
Nếu là người dùng Đám mây riêng, bạn có thể sử dụng nhật ký Trình xử lý thông báo để xác thực xem kích thước tiêu đề Phản hồi có vượt quá giới hạn cho phép trong Apigee Edge hay không.
Kiểm tra nhật ký của Trình xử lý thư:
/opt/apigee/var/log/edge-message-processor/logs/system.log- Tìm kiếm để xem có lỗi
502nào xảy ra 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 xem có yêu cầu nào vẫn không thành công với502hay không. Bạn có thể sử dụng chuỗi tìm kiếm sau:grep -ri "response headers size exceeding"
- Bạn sẽ thấy các dòng từ
system.logtươ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)
-
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ý thông báo 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ớn hơn 25 KB và Apigee sẽ đưa ra 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
Kích thước cố định
Lựa chọn 1 [Đề xuất]: Sửa ứng dụng máy chủ đích để không gửi kích thước tiêu đề vượt quá giới hạn của Apigee
- Phân tích lý do khiến máy chủ đích cụ thể gửi kích thước tiêu đề phản hồi lớn hơn giới hạn cho phép như được xác định trong phần Giới hạn.
- Nếu không mong muốn, hãy sửa đổi ứng dụng máy chủ phụ trợ để ứng dụng này gửi các tiêu đề Phản hồi có kích thước nhỏ hơn giới hạn cho phép trong Apigee Edge.
- Kiểm tra xem thông tin tiêu đề có thể được gửi dưới dạng một phần của nội dung phản hồi hay không.
- Nếu có thể, hãy gửi mọi thông tin lớn 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. Điều này sẽ đảm bảo rằng bạn không vượt quá giới hạn tiêu đề phản hồi.
CwC
Cách 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 cho phép 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ông báo
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ư được ghi lại cho Kích thước tiêu đề yêu cầu/phản hồi trong Giới hạn của Apigee Edge.
- Nếu bạn là người dùng Đám mây công cộng, thì giới hạn tối đa cho kích thước tiêu đề Yêu cầu và Phản hồi là theo tài liệu về Kích thước tiêu đề Yêu cầu/Phản hồi trong Giới hạn của Apigee Edge.
- Nếu là người dùng Đám mây riêng tư , thì bạn có thể đã sửa đổi giới hạn tối đa mặc định cho kích thước tiêu đề Yêu cầu và Phản hồi (mặc dù đây không phải là cách nên làm). 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 phần 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 bằng một giá trị mới trên Message Processors.
- Trên máy Message Processor, hãy tìm thuộc tính
HTTPResponse.headers.limittrong thư mục/opt/apigee/edge-message-processor/confvà kiểm tra để 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
- Sau đây là kết quả mẫu của lệnh trên:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
Trong ví dụ về đầu ra ở trên, hãy lưu ý rằng thuộc tính
HTTPResponse.headers.limitđã được đặt với giá trị25ktronghttp.properties.Điều này cho biết giới hạn kích thước tải trọng Phản hồi được định cấu hình trong Apigee cho Đám mây riêng là 25 KB.
Nếu bạn vẫn cần được Nhóm hỗ trợ Apigee trợ giúp, hãy truy cập vào phần Thông tin chẩn đoán bắt buộc phải thu thập.
Phải thu thập thông tin chẩn đoán
Thu thập thông tin chẩn đoán sau đây, rồi liên hệ với Nhóm hỗ trợ Apigee Edge:
Nếu bạn là người dùng Đám mây công cộng, hãy cung cấp những thông tin sau:
- Tên tổ chức
- Tên môi trường
- Tên API Proxy
- Lệnh
curlhoàn tất được dùng để tái tạo lỗi502 - 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, hãy cung cấp những thông tin sau:
- Thông báo lỗi hoàn chỉnh được ghi nhận cho 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 API Proxy
- Tệp theo dõi cho các yêu cầu API không thành công
- Lệnh
curlhoàn tất được dùng để tái tạo lỗi502 - 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_logTrong đó: ORG, ENV và PORT# được thay thế bằng các giá trị thực tế.
- Nhật ký hệ thống của Trình xử lý tin nhắn
/opt/apigee/var/log/edge-message-processor/logs/system.log