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.ResponseWithBody 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 một trong các thông báo lỗi sau:
{
"fault":{
"faultstring":"Received 204 Response with message body",
"detail":{
"errorcode":"protocol.http.ResponseWithBody"
}
}
}{
"fault":{
"faultstring":"Received 205 Response with message body",
"detail":{
"errorcode":"protocol.http.ResponseWithBody"
}
}
}Các nguyên nhân có thể
Lỗi này xảy ra nếu phản hồi HTTP từ máy chủ phụ trợ đến Apigee Edge là 204 No Content hoặc 205 Reset Content nhưng chứa nội dung phản hồi và/hoặc một hoặc nhiều tiêu đề sau:
Content-LengthContent-EncodingTransfer-Encoding
Theo quy cách
RFC 7231, phần 6.3.5: 204 Không có nội dung và
RFC 7231, phần 6.3.6: 205 Đặt lại nội dung, máy chủ gốc không được gửi thêm nội dung nào trong phần nội dung hữu ích của phản hồi có mã trạng thái 204 No
Content hoặc 205 Reset Content. Các tiêu đề phản hồi như Content-Length, Content-Encoding hoặc Transfer-Encoding cho biết kích thước, loại hoặc định dạng của tải trọng phản hồi.
Do đó, Apigee Edge sẽ trả về mã trạng thái 502 Bad Gateway kèm theo mã lỗi protocol.http.ResponseWithBody cho ứng dụng khách trong các trường hợp sau:
| Mã trạng thái từ máy chủ phụ trợ | ||
|---|---|---|
| Phản hồi từ máy chủ phụ trợ chứa | 204 No Content | 205 Reset Content (Đặt lại nội dung) |
| Nội dung phản hồi | ERROR (LỖI) | ERROR (LỖI) |
Tiêu đề (đặt thành giá trị khác 0) |
ERROR (LỖI) | ERROR (LỖI) |
(đặt thành mã hoá được hỗ trợ trong Apigee Edge) |
ERROR (LỖI) | KHÔNG CÓ LỖI |
Transfer-Encoding |
ERROR (LỖI) | ERROR (LỖI) |
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 |
|---|---|---|
| Nội dung phản hồi hoặc Tiêu đề có phản hồi 204 từ máy chủ phụ trợ | Máy chủ phụ trợ gửi phản hồi 204 No Content hoặc 205 Reset Content kèm theo nội dung phản hồi và/hoặc một hoặc nhiều tiêu đề Content-Type, Content-Encoding hoặc Transfer-Encoding. |
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.
- Vẽ Mã lỗi theo Thời gian.
Chọn một ô có mã lỗi
protocol.http.ResponseWithBodynhư minh hoạ bên dưới:
Bạn sẽ thấy thông tin về mã lỗi
protocol.http.ResponseWithBodynhư 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.ResponseWithBody.
- Mã trạng thái:
- Nếu Nguồn lỗi có giá trị là
targetvà Mã lỗi có giá trị làprotocol.http.ResponseWithBody, thì điều đó cho biết lỗi xảy ra do máy chủ phụ trợ đã gửi mã trạng thái204 No Contenthoặc205 Reset Contentcùng với nội dung phản hồi và/hoặc một trong các tiêu đề được đề cập trong phần Nguyên nhân có thể xảy ra.
Công cụ theo dõi
Cách chẩn đoán lỗi bằng công cụ Trace (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
Đảm bảo bạn đã bật chế độ Show all FlowInfos (Hiện tất cả FlowInfo):
- 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 trong
flowinfoError (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:Tình huống 1
Tình huống 1: Máy chủ phụ trợ phản hồi bằng mã trạng thái
204 No Contentcó chứa nội dung phản hồi và/hoặc một trong các tiêu đề được liệt kê trong Các nguyên nhân có thể xảy ra.
Ghi lại các giá trị sau đây từ dấu vết:
- error:
Received 204 Response with message body - error.class:
com.apigee.rest.framework.BadGateway
Tình huống 2
Tình huống 2: Máy chủ phụ trợ phản hồi bằng mã trạng thái
204 No Contentcó chứa nội dung phản hồi và/hoặc một trong các tiêu đề được liệt kê trong phần Nguyên nhân có thể xảy ra.
Ghi lại các giá trị sau đây từ dấu vết:
- error:
Received 205 Response with message body - error.class:
com.apigee.rest.framework.BadGateway
- error:
- Chuyển đến giai đoạn AX (Dữ liệu Analytics được ghi lại) trong dấu vết và nhấp vào giai đoạn đó.
Di chuyển xuống phần Phase Details (Thông tin chi tiết về giai đoạn), Error Headers (Tiêu đề lỗi) và xác định các giá trị của X-Apigee-fault-code và X-Apigee-fault-source như minh hoạ bên dưới:
- Xin lưu ý rằng các giá trị của X-Apigee-fault-code và X-Apigee-fault-source lần lượt là
are protocol.http.ResponseWithBodyvàtarget. Điều này cho biết lỗi xảy ra do máy chủ phụ trợ gửi mã trạng thái204 No Contenthoặc205 Reset Contentcùng với nội dung phản hồi và/hoặc một trong các tiêu đề được đề cập trong phần Nguyên nhân có thể xảy ra.Lỗi Giá trị X-Apigee-fault-code protocol.http.ResponseWithBodyX-Apigee-fault-source target
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.ResponseWithBodytrong 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 tìm thấy bất kỳ lỗi
502nào có X-Apigee-fault-code khớp với giá trị củaprotocol.http.ResponseWithBody, thì 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 đề phản hồi Giá trị X-Apigee-fault-code protocol.http.ResponseWithBodyX-Apigee-fault-source target- Xin lưu ý rằng các giá trị của X-Apigee-fault-code và X-Apigee-fault-source lần lượt là
protocol.http.ResponseWithBodyvàtarget. Điều này cho biết lỗi xảy ra do máy chủ phụ trợ gửi mã trạng thái204 No Contenthoặc205 Reset Contentcùng với nội dung phản hồi và/hoặc một trong các tiêu đề được đề cập trong phần Nguyên nhân có thể xảy ra.
Nguyên nhân: Nội dung phản hồi hoặc tiêu đề có phản hồi 204 từ máy chủ phụ trợ
Chẩn đoán
- Xác định Mã lỗi và Nguồn lỗ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 Mã lỗi là
protocol.http.ResponseWithBodyvà Nguồn lỗi có giá trị làtarget, thì điều này cho biết máy chủ phụ trợ đã phản hồi bằng mã trạng thái204 No Contenthoặc205 Reset Contentcùng với nội dung phản hồi và/hoặc một trong các tiêu đề được đề cập trong phần Nguyên nhân có thể xảy ra. Để xác thực xem máy chủ phụ trợ có thực sự gửi nội dung tải trọng phản hồi và/hoặc một hoặc nhiều tiêu đề được đề cập trong phần Các nguyên nhân có thể xảy ra hay không, bạn có thể thực hiện các bước sau:
Nếu bạn là người dùng Đám mây công khai và nếu bạn có thể gửi cùng một yêu cầu API đến máy chủ phụ trợ ngay từ bất kỳ hệ thống nào của mình.
- Nếu là người dùng Đám mây riêng, thì bạn có thể đưa ra cùng một yêu cầu API cho máy chủ phụ trợ ngay từ một trong các Trình xử lý thông báo được liên kết với tổ chức và môi trường cụ thể nơi xảy ra lỗi.
Xem xét phản hồi nhận được từ máy chủ phụ trợ và xác minh rằng phản hồi đó chứa nội dung tải trọng phản hồi và/hoặc một hoặc nhiều phần đầu được đề cập ở trên. Nếu có, thì đó là nguyên nhân gây ra lỗi này.
Mẫu số 1
Ví dụ 1: Phản hồi của máy chủ phụ trợ 204 có tiêu đề Content-Encoding
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Encoding: gzip< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveTrong mẫu này, máy chủ phụ trợ đã phản hồi bằng mã trạng thái
204 No ContentvàContent-Encoding: gzipMẫu số 2
Ví dụ 2: Phản hồi của máy chủ phụ trợ 204 có tiêu đề Content-Length
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Length: 48< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveTrong mẫu này, máy chủ phụ trợ đã phản hồi bằng mã trạng thái
204 No ContentvàContent-Length: 48Ví dụ 3
Ví dụ 3: Phản hồi của máy chủ phụ trợ 205 có nội dung phản hồi
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 205 Reset Content < Date: Sat, 31 Jul 2021 17:14:09 GMT < Content-Length: 12 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host X.X.X.X left intact
This is a sample ResponseTrong mẫu này, máy chủ phụ trợ đã phản hồi bằng mã trạng thái
205 Reset Contentkèm theo nội dung phản hồiThis is a sample Response.- Trong tất cả các ví dụ trên, máy chủ phụ trợ đã gửi mã trạng thái
204 No Contenthoặc205 Reset Contentcùng với nội dung phản hồi và/hoặc một trong các tiêu đề được đề cập trong phần Các nguyên nhân có thể xảy ra. - Do đó, Apigee Edge đã gửi mã trạng thái
502 Bad Gatewaykèm theo mã lỗiprotocol.http.ResponseWithBody.
Độ phân giải
Đảm bảo rằng máy chủ phụ trợ luôn tuân thủ Quy cách
RFC 7231, phần 6.3.6: 205 Đặt lại nội dung khi gửi phản hồi 204 No Content hoặc 205 Reset Content đến Apigee Edge. Tức là máy chủ phụ trợ KHÔNG ĐƯỢC gửi nội dung sau đây trong phản hồi 204 No Content hoặc 205 Reset Content:
- Nội dung phản hồi
- Và bất kỳ tiêu đề nào sau đây:
Content-LengthContent-EncodingTransfer-Encoding
Thông số kỹ thuật
Apigee Edge phản hồi bằng mã trạng thái 502 Bad Gateway và mã lỗi protocol.http.ResponseWithBody nếu máy chủ phụ trợ gửi phản hồi 204 No Content hoặc 205 Reset Content nhưng không tuân thủ các quy cách RFC sau:
| Thông số kỹ thuật |
|---|
| RFC 7231, phần 6.3.5: 204 No Content |
| RFC 7231, phần 6.3.6: 205 Reset Content (Đặt lại nội dung) |
Những điểm chính cần lưu ý
Giải pháp được đề xuất là sửa máy chủ phụ trợ để gửi mã trạng thái 204 No Content và 205 Reset Content mà không có nội dung phản hồi và bất kỳ tiêu đề nào – Content-Length, Content-Encoding và Transfer-Encoding, đồng thời tuân thủ các quy cách
RFC 7231, phần 6.3.5: 204 Không có nội dung và
RFC 7231, phần 6.3.6: 205 Đặt lại nội dung.
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
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 môi trường
- Gói API Proxy
- Tệp theo dõi cho các yêu cầu API
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