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.Response405WithoutAllowHeader
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":"Received 405 Response without Allow Header", "detail":{ "errorcode":"protocol.http.Response405WithoutAllowHeader" } } }
Các nguyên nhân có thể
Lỗi này xảy ra nếu máy chủ phụ trợ phản hồi bằng mã trạng thái 405 Method Not Allowed
mà không có tiêu đề Allow
.
Theo thông số kỹ thuật
RFC 7231, section 6.5.5: 405 Phương pháp không được phép, dự kiến rằng máy chủ nguồn gốc PHẢI tạo và gửi trường tiêu đề Allow
trong phản hồi 405
chứa danh sách các phương thức hiện được hỗ trợ của tài nguyên đích. Nếu không, Apigee sẽ phản hồi bằng 502 Bad Gateway
và mã lỗi protocol.http.Response405WithoutAllowHeader
.
Nguyên nhân | Nội dung mô tả | Hướng dẫn khắc phục sự cố áp dụng cho |
---|---|---|
Phản hồi 405 không có tiêu đề Cho phép từ máy chủ phụ trợ | Máy chủ phụ trợ đang xử lý yêu cầu API sẽ phản hồi bằng mã trạng thái 405 mà không có tiêu đề Allow . |
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 Edge với tư cách là 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.Response405WithoutAllowHeader
như minh hoạ dưới đây:Thông tin về mã lỗi
protocol.http.Response405WithoutAllowHeader
xuất hiện như sau:Nhấp vào Xem nhật ký rồi mở rộng một trong các yêu cầu không thành công để xem thêm thông tin.
- 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.Response405WithoutAllowHeader
.
- Mã trạng thái:
- Nếu Nguồn lỗi là
target
và Mã lỗi làprotocol.http.Response405WithoutAllowHeader
, thì điều đó cho biết máy chủ phụ trợ đã phản hồi bằng mã trạng thái405 Method Not Allowed
mà không có tiêu đềAllow
.
Công cụ theo dõi
Cách chẩn đoán lỗi bằng công cụ Theo dõi:
- Bật
phiên theo dõi và một trong hai tùy chọn sau:
- Chờ lỗi
502 Bad Gateway
xảy ra, hoặc - Nếu bạn có thể tái tạo vấn đề, hãy thực hiện lệnh gọi API để tái hiện vấ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 trong quá trình theo dõi và xác định vị trí xảy ra lỗi.
Bạn thường sẽ thấy lỗi này trong quy trình 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:
Ghi lại giá trị của lỗi trong dấu vết.
Dấu vết mẫu ở trên cho thấy lỗi là
Received 405 Response without Allow Header
. Vì lỗi được Apigee báo cáo sau khi yêu cầu được gửi đến máy chủ phụ trợ, nên lỗi này cho biết máy chủ phụ trợ đã gửi mã trạng thái phản hồi405
không có tiêu đềAllow
.- Chuyển đến Giai đoạn AX (Dữ liệu phân tích đã ghi lại) trong dấu vết rồi nhấp vào đó.
Di chuyển xuống mục Error/ Response Headers (Tiêu đề lỗi/phản hồi) trong bảng Giai đoạn chi tiết rồi xác định giá trị của X-Apigee-fault-code và X-Apigee-fault-source như bên dưới:
- Bạn sẽ thấy các giá trị của X-Apigee-fault-code và X-Apigee-fault-source tương ứng là
protocol.http.Response405WithoutAllowHeader
vàtarget
, cho biết lỗi này xảy ra vì phần phụ trợ đã gửi mã trạng thái phản hồi405
mà không có tiêu đềAllow
.Tiêu đề phản hồi Giá trị X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
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ề lỗi HTTP
502
. Kiểm tra nhật ký truy cập NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Trong đó: ORG, ORG 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.Response405WithoutAllowHeader
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ới502
hay không. 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ủaprotocol.http.Response405WithoutAllowHeader
, thì hãy xác định giá trị của X-Apigee-fault-codeVí 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 cho X-Apigee- fault-code và X-Apigee-fault-source:
Tiêu đề phản hồi Giá trị X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source target
Nguyên nhân: phản hồi 405 không có tiêu đề Cho phép từ máy chủ phụ trợ
Chẩn đoán
- Xác định Mã lỗi và Nguồn lỗi cho
502 Bad Gateway
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 thường gặp. - Nếu Mã lỗi là
protocol.http.Response405WithoutAllowHeader
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ái405
không có tiêu đềAllow
. Do đó, Apigee phản hồi lại bằng502 Bad Gateway
kèm theo mã lỗiprotocol.http.Response405WithoutAllowHeader
.
Độ phân giải
Hãy sử dụng một trong các phương pháp sau để giải quyết vấn đề:
Máy chủ phụ trợ
Lựa chọn 1: Khắc phục Máy chủ phụ trợ để gửi mã trạng thái 405 có tiêu đề Cho phép:
Đảm bảo máy chủ phụ trợ luôn tuân thủ thông số kỹ thuật RFC 7231, mục 6.5.5: 405 Phương pháp không được phép và gửi kèm mã trạng thái
405
bằng cách thêm danh sách các phương thức được phép vào tiêu đềAllow
như minh hoạ dưới đây:Allow: HTTP_METHODS
- Ví dụ: nếu máy chủ phụ trợ của bạn cho phép các phương thức
GET
,POST
vàHEAD
, thì bạn cần đảm bảo rằng tiêu đềAllow
chứa các phương thức đó như sau:Allow: GET, POST, HEAD
Xử lý lỗi
Lựa chọn 2: Sử dụng tính năng Xử lý lỗi để gửi mã trạng thái 405 có tiêu đề Cho phép từ proxy API của bạn:
Nếu máy chủ phụ trợ trả về mã trạng thái 405
mà không có tiêu đề Allow
, thì bạn có thể dùng phương thức xử lý lỗi để phản hồi lại bằng mã trạng thái 405
và tiêu đề Allow
qua proxy API như sau:
Tạo một chính sách như Chính sách assignMessage hoặc chính sách RaiseFault và đặt mã trạng thái thành
405
có tiêu đềAllow
và thông báo tuỳ chỉnh.Chính sách AccessMessage mẫu để gửi 405 có tiêu đề Cho phép:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader"> <DisplayName>AM-405WithAllowHeader</DisplayName> <Set> <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload> <StatusCode>405</StatusCode> <ReasonPhrase>Method Not Allowed</ReasonPhrase> </Set> <Add> <Headers> <Header name="Allow">GET, POST, HEAD</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Tạo một
FaultRule
trongTargetEndpoint
để gọi chính sách khi gặp lỗi502
với mã lỗiprotocol.http.Response405WithoutAllowHeader
.Cấu hình TargetEndpoint mẫu hiển thị FaultRule:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>
- Lưu các thay đổi này trong bản sửa đổi mới của proxy API và triển khai bản sửa đổi đó.
- Thực hiện lệnh gọi API và xác minh rằng bạn nhận được mã trạng thái
405
có tiêu đềAllow
.
Định cấu hình tài sản
Cách 3: Định cấu hình thuộc tính trong Trình xử lý thư để ngăn Apigee Edge trả về lỗi 502
- Nếu là người dùng Đám mây riêng tư, bạn có thể cập nhật thuộc tính
HTTP.ignore.allow_header.for.405
thànhtrue
để ngăn quá trình Apigee Edge gây ra lỗi502
, ngay cả khi máy chủ phụ trợ phản hồi bằng mã trạng thái405
mà không có tiêu đềAllow
theo Hướng dẫn: Định cấu hình tiêu đề bỏ qua cho phép của thuộc tính 405 trong Bộ xử lý tin nhắn. - Nếu bạn là người dùng Public Cloud, vui lòng liên hệ với Nhóm hỗ trợ Apigee
Thông số kỹ thuật
Apigee dự kiến máy chủ phụ trợ sẽ phản hồi 405 Method Not Allowed
cùng với tiêu đề Allow
theo các thông số kỹ thuật sau:
Thông số kỹ thuật | |
---|---|
RFC 7231, mục 6.5.5: 405 Phương pháp không được phép | |
RFC 7231, mục 7.4.1: Cho phép |
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 405
có tiêu đề Allow
và tuân thủ thông số kỹ thuật
RFC 7231, mục 6.5.5: 405 Phương thức không được phép.
Nếu bạn vẫn cần Nhóm hỗ trợ Apigee hỗ trợ, hãy truy cập vào 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
Nếu sự cố vẫn tiếp diễn sau khi làm theo hướng dẫn ở trên, hãy thu thập thông tin chẩn đoán sau đây rồi liên hệ với Nhóm hỗ trợ 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ạo502 Bad Gateway
có mã lỗiprotocol.http.Response405WithoutAllowHeader
- 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~ORG.PORT#_access_log
Trong đó: ORG, ORG và PORT# được thay bằng giá trị thực tế.
- Nhật ký hệ thống của Bộ xử lý thông báo
/opt/apigee/var/log/edge-message-processor/logs/system.log