502 Bad Gateway - Phản hồi 405 không có tiêu đề Allow

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 khách sẽ nhận được mã trạng thái HTTP 502 Bad Gateway kèm theo lỗi mã protocol.http.Response405WithoutAllowHeader làm phản hồi cho lệnh gọi API.

Thông báo lỗi

Ứng dụng sẽ 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 trạng thái 405 Method Not Allowed mà không có tiêu đề Allow.

Theo thông số kỹ thuật RFC 7231, mục 6.5.5: 405 Phương thức không được phép, dự kiến là máy chủ gốc PHẢI tạo và gửi trường tiêu đề Allow trong phản hồi 405 có chứa danh sách phương thức hiện được hỗ trợ của tài nguyên mục tiêu. 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 công khai và riêng tư

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:

  1. Đăng nhập vào Giao diện người dùng Edge với tư cách là người dùng bằng một vai trò thích hợp.
  2. Chuyển sang tổ chức mà bạn muốn điều tra vấn đề này.

    danh sách thả xuống tổ chức
  3. Chuyển đến thẻ Analyze (Phân tích) > Giám sát API > Điều tra.
  4. Chọn khung thời gian cụ thể mà bạn phát hiện thấy lỗi.
  5. Vẽ Mã lỗi theo Thời gian.

  6. Chọn một ô có mã lỗi protocol.http.Response405WithoutAllowHeader như minh hoạ dưới đây:

  7. Thông tin về mã lỗi protocol.http.Response405WithoutAllowHeader được hiển thị như sau:

  8. Nhấp vào Xem nhật ký rồi mở rộng một trong những yêu cầu không thực hiện được để xem thêm thông tin.

  9. Từ cửa sổ Logs (Nhật ký), hãy lưu ý những thông tin chi tiết sau:
    • Mã trạng thái: 502
    • Nguồn lỗi: target
    • Mã lỗi: protocol.http.Response405WithoutAllowHeader.
  10. Nếu Nguồn lỗitargetMã lỗiprotocol.http.Response405WithoutAllowHeader, thì điều đó cho biết chương trình phụ trợ máy chủ đã phản hồi bằng mã trạng thái 405 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:

  1. Bật theo dõi phiên hoạt động
    • 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 để tái hiện vấn đề – 502 Bad Gateway lỗi
  2. Đảm bảo bạn đã bật chế độ Show all FlowInfos (Hiện tất cả FlowInfos):

  3. 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.
  4. Di chuyển qua các giai đoạn của quá trình theo dõi và xác định nơi xảy ra lỗi.
  5. Thông thường, bạn sẽ thấy lỗi trong một luồng sau khi Yêu cầu được gửi đến máy chủ mục tiêu giai đoạn như sau:

  6. 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 này do Apigee đưa ra sau khi yêu cầu được gửi đến máy chủ phụ trợ máy chủ, nó cho biết rằng máy chủ phụ trợ đã gửi mã trạng thái phản hồi 405 mà không có tiêu đề Allow.

  7. Chuyển đến Giai đoạn AX (Đã ghi dữ liệu Analytics) trong dấu vết và nhấp vào đó.
  8. Cuộn xuống phần Tiêu đề lỗi / phản hồi trong phần Chi tiết giai đoạn và xác định của X-Apigee-fault-codeX-Apigee-fault-source như sau:

  9. Bạn sẽ thấy các giá trị của X-Apigee-fault-codeX-Apigee-fault-source là lần lượt là protocol.http.Response405WithoutAllowHeadertarget, chỉ ra rằng lỗi này là do chương trình phụ trợ đã gửi Mã trạng thái phản hồi 405 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:

  1. Nếu là người dùng Đám mây riêng tư, 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.
  2. Kiểm tra nhật ký truy cập NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
    

    Trong đó: ORG, ORGPORT# được thay thế bằng các giá trị thực tế.

  3. Tìm kiếm xem có lỗi 502 nào với mã lỗi hay không protocol.http.Response405WithoutAllowHeader trong một khoảng thời gian cụ thể (nếu sự cố đã xảy ra trong quá khứ) hoặc nếu có bất kỳ yêu cầu nào vẫn không thành công với 502.
  4. Nếu bạn tìm thấy bất kỳ lỗi 502 nào với X-Apigee-fault-code khớp với giá trị protocol.http.Response405WithoutAllowHeader, sau đó xác định của X-Apigee-fault-source.

    Lỗi 502 mẫu trong nhật ký truy cập NGINX:

    Mục nhập mẫu ở trên từ nhật ký truy cập NGINX có các giá trị sau cho X-Apigee- error-codeX-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

  1. Xác định Mã lỗiNguồn lỗi cho 502 Bad Gateway bằng cách sử dụng nhật ký 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 Các bước chẩn đoán thường gặp.
  2. Nếu Mã lỗiprotocol.http.Response405WithoutAllowHeader và Nguồn lỗi có giá trị target, thì điều này cho biết rằng máy chủ phụ trợ đã đã trả lời bằng mã trạng thái 405 không có tiêu đề Allow. Do đó, Apigee phản hồi bằng 502 Bad Gateway kèm theo mã lỗi protocol.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 với tiêu đề Cho phép:

  1. Đảm bảo máy chủ phụ trợ luôn tuân thủ quy cách RFC 7231, mục 6.5.5: 405 Phương thức không được phép và gửi với trạng thái 405 bằng cách thêm danh sách các phương thức được cho phép trong tiêu đề Allow như minh hoạ dưới đây:

    Allow: HTTP_METHODS
    
  2. Ví dụ: nếu máy chủ phụ trợ của bạn cho phép GET, POSTHEAD, thì bạn cần đảm bảo rằng tiêu đề Allow chứa chúng 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 với tiêu đề Cho phép từ API của bạn proxy:

Nếu máy chủ phụ trợ trả về mã trạng thái 405 không có Allow bạn có thể sử dụng chức năng xử lý lỗi để phản hồi lại bằng mã trạng thái 405 và Tiêu đề Allow từ proxy API của bạn như sau:

  1. Tạo một chính sách như Chính sách assignMessage hoặc chính sáchRaiseFault và đặt mã trạng thái thành 405 với tiêu đề Allow và tùy chỉnh .

    Ví dụ về chính sách PagingMessage để gửi mã 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>
    
  2. Tạo một FaultRule trong TargetEndpoint để gọi chính sách này khi gặp lỗi 502 với mã lỗi protocol.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>
    
  3. Lưu những thay đổi này vào một bản sửa đổi mới của proxy API và triển khai bản sửa đổi.
  4. 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 bằng Tiêu đề Allow.

Định cấu hình tài sản

Cách 3: Thiết lập tài sản trong Trình xử lý tin nhắn để ngăn Apigee Edge trả về lỗi 502

  1. 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 này HTTP.ignore.allow_header.for.405 đến true để ngăn Apigee Edge đưa ra lỗi 502, ngay cả khi máy chủ phụ trợ phản hồi bằng 405 mã trạng thái không có tiêu đề Allow bằ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 phép cho thuộc tính 405 trong Bộ xử lý thư.
  2. 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 nhận được phản hồi của 405 Method Not Allowed từ máy chủ phụ trợ bằng tiêu đề Allow theo thông số kỹ thuật sau:

Thông số kỹ thuật
RFC 7231, mục 6.5.5: 405 Phương thức 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 được đề xuất là khắc phục sự cố máy chủ phụ trợ để gửi mã trạng thái 405 với 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 hỗ trợ từ Nhóm hỗ trợ Apigee, hãy truy cập vào 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 ngay cả sau khi đã làm theo các hướng dẫn trên, hãy thu thập những thông tin sau thông tin chẩn đoán rồi liên hệ với Bộ phận hỗ trợ Apigee Edge.

Nếu bạn là người dùng Cloud Public, 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 502 Bad Gateway bằng mã lỗi protocol.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 các thông tin sau:

  • Đã nhậ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ực hiện được
  • 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, ORGPORT# được thay thế bằng các giá trị thực tế.

  • Nhật ký hệ thống của Trình xử lý thư
    /opt/apigee/var/log/edge-message-processor/logs/system.log
    

Tài liệu tham khảo

Xử lý lỗi trong Apigee