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.ResponseWithBody
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ể 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ợ cho Apigee Edge là 204 No Content
hoặc 205 Reset Content
nhưng có chứa nội dung phản hồi và/hoặc một hoặc nhiều tiêu đề sau:
Content-Length
Content-Encoding
Transfer-Encoding
Theo thông số kỹ thuật
RFC 7231, mục 6.3.5: 204 Không có nội dung và
RFC 7231, mục 6.3.6: 205 Đặt lại nội dung, dự kiến máy chủ gốc sẽ không gửi nội dung bổ sung nào trong nội dung tải trọng 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ột mã trạng thái 502 Bad Gateway
có mã lỗi protocol.http.ResponseWithBody
cho ứng dụng 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ợ có chứa | 204 Không có nội dung | 205 Đặt lại nội dung |
Nội dung phản hồi | ERROR (LỖI) | ERROR (LỖI) |
(đã đặt thành khác 0) |
ERROR (LỖI) | ERROR (LỖI) |
(được đặt thành phương thức mã hoá được hỗ trợ trong Apigee Edge) |
ERROR (LỖI) | KHÔNG CÓ LỖI |
Transfer-Encoding |
ERROR (LỖI) | ERROR (LỖI) |
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 |
---|---|---|
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 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:
- Đă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.
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 quan sát thấy lỗi.
- Vẽ Mã lỗi dựa trên Thời gian.
Chọn một ô có mã lỗi
protocol.http.ResponseWithBody
như minh hoạ dưới đây:Bạn sẽ thấy thông tin về mã lỗi
protocol.http.ResponseWithBody
như sau: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.
- 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.ResponseWithBody
.
- Mã trạng thái:
- Nếu Nguồn lỗi có giá trị
target
và Mã lỗi có giá trịprotocol.http.ResponseWithBody
, thì tức là lỗi xảy ra do máy chủ phụ trợ đã gửi mã trạng thái204 No Content
hoặc205 Reset Content
có nội dung phản hồi và/hoặc một trong các tiêu đề nêu 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ụ Theo dõi:
- Bật tính năng theo dõi phiên và:
- Chờ lỗi
502 Bad Gateway
xả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 tuỳ chọn Show all FlowInfos (Hiện tất cả thông tin luồng):
- 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.
- Di chuyển qua các giai đoạn theo dõi và xác định vị trí xảy ra lỗi.
Thường thì bạn sẽ thấy lỗi trong phần Error (Lỗi)
flowinfo
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: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 Content
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.Hãy lưu ý các giá trị của các giá trị sau trong dấu vết:
- lỗi:
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 Content
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.Hãy lưu ý các giá trị của các giá trị sau trong dấu vết:
- lỗi:
Received 205 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
- 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 rồi nhấp vào đó.
Di chuyển xuống mục Giai đoạn chi tiết, Tiêu đề lỗi (Error Headers) rồi xác định giá trị của X-Apigee-fault-code và X-Apigee-fault-source như sau:
- Xin lưu ý rằng giá trị của X-Apigee-fault-code và X-Apigee-fault-source lần lượt là
are protocol.http.ResponseWithBody
vàtarget
. Mã này cho biết lỗi xảy ra do máy chủ phụ trợ đã gửi mã trạng thái204 No Content
hoặc205 Reset Content
cù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.ResponseWithBody
X-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 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
. Kiểm tra nhật ký truy cập NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Trong đó: ORG, ENV và PORT# được thay bằng giá trị thực tế.
- Tìm kiếm để xem có lỗi
502
nào với mã lỗiprotocol.http.ResponseWithBody
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ới502
hay không. Nếu bạn tìm thấy bất kỳ lỗi
502
nà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 mẫu nêu trên từ nhật ký truy cập NGINX có các giá trị sau đây cho X- Apigee-fault-code và X-Apigee-fault-source:
Tiêu đề phản hồi Giá trị X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
- Xin lưu ý rằng giá trị của X-Apigee-fault-code và X-Apigee-fault-source lần lượt là
protocol.http.ResponseWithBody
vàtarget
. Mã này cho biết lỗi xảy ra do máy chủ phụ trợ đã gửi mã trạng thái204 No Content
hoặc205 Reset Content
cù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 đề 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 phát hiện được bằng công cụ 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 thường gặp.
- Nếu Mã lỗi là
protocol.http.ResponseWithBody
và Nguồn lỗi có giá trịtarget
, thì tức là máy chủ phụ trợ đã phản hồi bằng mã trạng thái204 No Content
hoặc205 Reset Content
, kèm theo nội dung phản hồi và/hoặc một trong các tiêu đề nêu trong phần Nguyên nhân có thể xảy ra. Để xác thực xem máy chủ phụ trợ đã thực sự gửi nội dung tải trọng phản hồi hay chưa và/hoặc một hay nhiều tiêu đề được đề cập trong phần Nguyên nhân có thể xảy ra, bạn có thể thực hiện các bước sau:
Nếu bạn là người dùng Cloud công cộng và bạn có thể gửi cùng một yêu cầu API tới 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 tư, bạn có thể gửi yêu cầu API tương tự tới máy chủ phụ trợ ngay từ một trong các Đơn vị xử lý thông báo liên kết với tổ chức và môi trường cụ thể nơi phát hiện lỗi.
Xem xét nội dung phản hồi nhận được từ máy chủ phụ trợ và xác minh rằng nội dung phản hồi đó có chứa một nội dung tải trọng phản hồi và/hoặc một hoặc nhiều tiêu đề nêu trên. Nếu có, thì đó chính là nguyên nhân gây ra lỗi này.
Mẫu số 1
Mẫu 1: Phản hồi của máy chủ phụ trợ 204 với tiêu đề mã hoá nội dung
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 Content
vàContent-Encoding: gzip
Mẫu số 2
Mẫu số 2: Phản hồi của máy chủ phụ trợ 204 với 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 Content
vàContent-Length: 48
Mẫu số 3
Mẫu số 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 Response
Trong mẫu này, máy chủ phụ trợ đã phản hồi bằng mã trạng thái
205 Reset Content
có 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 Content
hoặc205 Reset Content
cù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. - Do đó, Apigee Edge đã gửi mã trạng thái
502 Bad Gateway
có mã lỗiprotocol.http.ResponseWithBody
.
Độ phân giải
Đảm bảo rằng máy chủ phụ trợ luôn tuân thủ Thông số kỹ thuật
RFC 7231, mục 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
cho Apigee Edge. Tức là máy chủ phụ trợ KHÔNG ĐƯỢC gửi những nội dung sau đây trong phản hồi 204 No Content
hoặc 205 Reset Content
:
- Nội dung tải trọng phản hồi
- Đồng thời, bất kỳ tiêu đề nào sau đây:
Content-Length
Content-Encoding
Transfer-Encoding
Thông số kỹ thuật
Apigee Edge sẽ 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 thông số kỹ thuật RFC sau đây:
Thông số kỹ thuật |
---|
RFC 7231, mục 6.3.5: 204 Không có nội dung |
RFC 7231, mục 6.3.6: 205 Đặt lại nội dung |
Các điểm chính cần lưu ý
Giải pháp đề 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 cũng như bất kỳ tiêu đề nào – Content-Length
, Content-Encoding
và Transfer-Encoding
, đồng thời tuân thủ các thông số kỹ thuật
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 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ỗ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 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 môi trường
- Gói Proxy API
- 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_log
Trong đó: ORG, ENV và PORT# đượ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