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.Response405WithoutAllowHeader 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":"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 quy cách
RFC 7231, phần 6.5.5: 405 Phương thức không được phép, máy chủ 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 | 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 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 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.Response405WithoutAllowHeadernhư minh hoạ bên dưới:
Thông tin về mã lỗi
protocol.http.Response405WithoutAllowHeadersẽ xuất hiện như hình dưới đây:
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ực hiện được để xem thêm thông tin.
- 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.Response405WithoutAllowHeader.
- Mã trạng thái:
- Nếu Nguồn lỗi là
targetvà 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 Allowedmà 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ụ Trace (Theo dõi):
- Bật
phiên theo dõi và một trong hai
- 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 để tái hiện vấ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.
Bạn thường sẽ thấy lỗi này trong một luồng sau giai đoạn Yêu cầu được gửi đến máy chủ đích như minh hoạ dưới đây:
Lưu ý 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 này do Apigee đưa ra sau khi yêu cầu được gửi đến máy chủ phụ trợ, nên lỗi này cho biết rằng máy chủ phụ trợ đã gửi mã trạng thái phản hồi405mà không có tiêu đềAllow.- Chuyển đến Giai đoạn AX (Dữ liệu Analytics được ghi lại) trong dấu vết rồi nhấp vào giai đoạn đó.
Di chuyển xuống phần Tiêu đề lỗi / phản hồi trong bảng điều khiển Thông tin chi tiết về giai đoạn 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:
- Bạn sẽ thấy các giá trị của X-Apigee-fault-code và X-Apigee-fault-source lần lượt là
protocol.http.Response405WithoutAllowHeadervàtarget, cho biết lỗi này xảy ra do phần phụ trợ đã gửi mã trạng thái phản hồi405mà không có tiêu đềAllow.Tiêu đề phản hồi Giá trị X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-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, thì bạn có thể sử 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 thế bằng các giá trị thực tế.
- Tìm xem có lỗi
502nào với mã lỗiprotocol.http.Response405WithoutAllowHeadertrong 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ớ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.Response405WithoutAllowHeader, 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 của 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.Response405WithoutAllowHeaderX-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 Gatewaybằ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.Response405WithoutAllowHeadervà Nguồn lỗi có giá trịtarget, thì điều này cho biết máy chủ phụ trợ đã phản hồi bằng mã trạng thái405mà không có tiêu đềAllow. Do đó, Apigee sẽ phản hồi bằng502 Bad Gatewayvới mã lỗiprotocol.http.Response405WithoutAllowHeader.
Độ phân giải
Hãy sử dụng một trong các phương thức sau để giải quyết vấn đề:
Máy chủ phụ trợ
Cách 1: Sửa Máy chủ phụ trợ để gửi mã trạng thái 405 kèm theo tiêu đề Cho phép:
Đảm bảo rằng máy chủ phụ trợ luôn tuân thủ quy cách RFC 7231, phần 6.5.5: 405 Phương thức không được phép và gửi bằng mã trạng thái
405bằng cách thêm danh sách các phương thức được phép trong tiêu đềAllownhư minh hoạ bên dưới: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,POSTvàHEAD, thì bạn cần đảm bảo rằng tiêu đềAllowchứa các phương thức đó như sau:Allow: GET, POST, HEAD
Xử lý lỗi
Cách 2: Sử dụng tính năng Xử lý lỗi để gửi mã trạng thái 405 kèm theo 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, bạn có thể sử dụng tính năng xử lý lỗi để phản hồi bằng mã trạng thái 405 và tiêu đề Allow từ proxy API của bạn 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
405với tiêu đềAllowvà thông báo tuỳ chỉnh.Chính sách AssignMessage mẫu để gửi 405 với 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
FaultRuletrongTargetEndpoint, lệnh này sẽ gọi chính sách khi gặp lỗi502kèm theo mã lỗiprotocol.http.Response405WithoutAllowHeader.Cấu hình TargetEndpoint mẫu cho thấy FaultRule:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>- Lưu những thay đổi này trong một bản sửa đổi mới của API proxy 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 đang nhận mã trạng thái
405bằng 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 báo để 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.405thànhtrueđể ngăn Apigee Edge đưa ra lỗi502, ngay cả khi máy chủ phụ trợ phản hồi bằng mã trạng thái405mà không có tiêu đềAllowbằng cách sử dụng hướng dẫn Cách thực hiện: Định cấu hình tiêu đề bỏ qua cho thuộc tính 405 trong Trình xử lý thông báo. - Nếu bạn là người dùng Public Cloud, vui lòng liên hệ với Nhóm hỗ trợ Apigee Edge
Thông số kỹ thuật
Apigee dự kiến phản hồi 405 Method Not Allowed từ máy chủ phụ trợ cùng với tiêu đề Allow theo các quy cách sau:
| Thông số kỹ thuật | |
|---|---|
| RFC 7231, phần 6.5.5: 405 Phương thức không được phép | |
| RFC 7231, phần 7.4.1: Cho phép |
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 405 bằng tiêu đề Allow và tuân thủ quy cách
RFC 7231, phần 6.5.5: 405 Phương thức không được phép.
Nếu bạn vẫn cần được Nhóm hỗ trợ Apigee trợ giúp, hãy xem phần Bạn 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 vấn đề vẫn tiếp diễn ngay cả sau khi bạn 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 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 chỉnh được dùng để tái tạo502 Bad Gatewaybằng 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, 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 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 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