Không có dịch vụ 503 - Không tạo được đường hầm proxy bằng 403

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 503 Service Unavailable với mã lỗi protocol.http.ProxyTunnelCreationFailed 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 503 Service Unavailable

Ngoài ra, bạn có thể nhận thấy thông báo lỗi sau:

{
   "fault":{
      "faultstring":"Proxy refused to create tunnel with response status 403",
      "detail":{
         "errorcode":"protocol.http.ProxyTunnelCreationFailed"
      }
   }
}

Chuyển tiếp proxy và đường hầm

Apigee Edge cho phép các proxy API giao tiếp với máy chủ phụ trợ thông qua một máy chủ proxy như giải thích trong phần Định cấu hình proxy chuyển tiếp. Máy chủ proxy mở một kết nối an toàn (HTTPS) hoặc không an toàn (HTTP) tới máy chủ phụ trợ tuỳ thuộc vào loại proxy (do thuộc tính HTTPClient.proxy.type) chỉ định và chuyển dữ liệu theo cả hai hướng. Đây được gọi là quá trình chạy đường hầm.

Theo mặc định, Apigee Edge sử dụng kỹ thuật tạo đường hầm cho tất cả lưu lượng truy cập. Để tắt tính năng tạo đường hầm, bạn cần đặt thuộc tính HTTPClient.use.tunneling thành false.

Mã lỗi: Protocol.http.ProxyTunnelCreationFailed

Apigee Edge sẽ trả về mã lỗi protocol.http.ProxyTunnelCreationFailed nếu máy chủ proxy không thể tạo đường hầm giữa Apigee Edge và máy chủ phụ trợ do các vấn đề như tường lửa, hạn chế ACL (Danh sách điều khiển truy cập), vấn đề DNS, không có máy chủ phụ trợ, hết thời gian chờ, v.v.

Mã trạng thái trong faultstring của phản hồi của Apigee Edge thường cho biết có thể có nguyên nhân cấp cao dẫn đến lỗi này.

Mẫu chuỗi lỗi:

Proxy refused to create tunnel with response status STATUS_CODE

Những nguyên nhân có thể dẫn đến một số mã trạng thái quan sát được trong chuỗi lỗi:

Bảng sau đây mô tả các nguyên nhân có thể xảy ra, tuỳ thuộc vào mã trạng thái được biểu thị trong faultstring:

Chuỗi lỗi Nội dung mô tả
Proxy đã từ chối tạo đường hầm với trạng thái phản hồi 403

403 - Forbidden

Việc này có thể xảy ra có thể là do tường lửa hoặc các hạn chế ACL được định cấu hình trên máy chủ phụ trợ ngăn cản việc tạo đường hầm.

Proxy đã từ chối tạo đường hầm với trạng thái phản hồi 503

503 - Service Unavailable

Việc này có thể xảy ra do các vấn đề về DNS, hạn chế tường lửa, việc máy chủ phụ trợ không hoạt động và ngăn việc tạo đường hầm

Proxy đã từ chối tạo đường hầm với trạng thái phản hồi 504

504 - Gateway Timeout

Điều này có thể xảy ra nếu có thời gian chờ trong khi tạo đường hầm

Tuỳ thuộc vào mã trạng thái quan sát trong faultstring, bạn cần sử dụng các kỹ thuật thích hợp để khắc phục sự cố. Cẩm nang này giải thích cách khắc phục sự cố nếu bạn quan sát mã trạng thái 403 trong faultstring cho mã lỗi protocol.http.ProxyTunnelCreationFailed.

Các nguyên nhân có thể

Lỗi này (mã trạng thái 403) xảy ra nếu có bất kỳ hạn chế tường lửa hoặc ACL (Danh sách kiểm soát quyền truy cập) nào được định cấu hình trên máy chủ phụ trợ, ngăn việc tạo đường hầm giữa Apigee Edge và máy chủ phụ trợ qua máy chủ proxy.

Nguyên nhân Nội dung mô tả Hướng dẫn khắc phục sự cố áp dụng cho
Proxy từ chối tạo đường hầm có trạng thái phản hồi 403 Máy chủ proxy từ chối tạo đường hầm vì nhận được tên máy chủ lưu trữ của máy chủ proxy thay vì tên máy chủ lưu trữ của máy chủ phụ trợ trong tiêu đề Host. Chỉ dành cho người dùng Edge 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:

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 tính năng theo dõi phiên và:
    • Chờ lỗi 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 đề 503 Service Unavailable bằng Proxy refused to create tunnel with response status 403.
  2. Đảm bảo bạn đã bật tuỳ chọn Show all FlowInfos (Hiện tất cả thông tin luồng):

  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 theo dõi và xác định vị trí xảy ra lỗi.
  5. Bạn thường sẽ thấy lỗi sau giai đoạn Đã bắt đầu quy trình yêu cầu mục tiêu như sau:

    Xin lưu ý những thông tin sau:

    lỗi: Proxy refused to create tunnel with response status 403

  6. 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 đó.
  7. Cuộn xuống mục Tiêu đề phản hồi Thông tin chi tiết về giai đoạn rồi xác định giá trị của X-Apigee-fault-codeX-Apigee-fault-source như sau:

    ( xem hình ảnh lớn hơn)

    ( xem hình ảnh lớn hơn)

  8. Bạn sẽ thấy các giá trị tương ứng của X-Apigee-fault-codeX-Apigee-fault-sourceprotocol.http.ProxyTunnelCreationFailedtarget , cho biết rằng lỗi này là do không tạo được đường hầm proxy do không nhận được tiêu đề máy chủ dự kiến.

    Tiêu đề phản hồi Giá trị
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    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ể dùng nhật ký truy cập NGINX để xác định thông tin chính về lỗi HTTP 503 Service Unavailable.
  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 bằng giá trị thực tế.

  3. Tìm kiếm xem có lỗi 503 nào với mã lỗi protocol.http.ProxyTunnelCreationFailed 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ới 503 hay không.
  4. Nếu bạn tìm thấy bất kỳ lỗi 503 nào trong đó X-Apigee-fault-code khớp giá trị củaX-Apigee-fault-code , thì hãy xác định giá trị của X-Apigee-fault-code

    Ví dụ về lỗi 503 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-codeX-Apigee-fault-source:

    Tiêu đề phản hồi Giá trị
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

Nguyên nhân: Proxy bị từ chối tạo đường hầm với trạng thái phản hồi 403

Chẩn đoán

  1. Xác định Mã lỗiNguồn lỗi cho 503 Service Unavailable bằng 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 phổ biến.
  2. Xem lại Thông báo lỗi rồi xác định mã trạng thái được chỉ định trong faultstring đối với lỗi khi tạo đường hầm.
  3. Trong trường hợp này, mã trạng thái là 403, có nghĩa là Bị cấm.
  4. Điều này có nghĩa là bạn không có đủ quyền hoặc đặc quyền để tạo đường hầm. Trường hợp này thường xảy ra nếu có bất kỳ tường lửa hoặc quy tắc hạn chế ACL (Danh sách kiểm soát truy cập) nào ngăn việc tạo đường hầm.
  5. Xem xét mọi tường lửa và/hoặc hạn chế ACL được định cấu hình trên máy chủ phụ trợ của bạn mà có thể ngăn việc tạo đường hầm.
  6. Tuỳ thuộc vào loại tường lửa và/hoặc hạn chế ACL, bạn cần khắc phục vấn đề một cách thích hợp.
  7. Hãy xem một ví dụ về quy định hạn chế của tường lửa để giải thích cách khắc phục và giải quyết vấn đề này:

    Tình huống: Hạn chế tường lửa trên máy chủ phụ trợ yêu cầu Tiêu đề máy chủ phải luôn chứa tên máy chủ của máy chủ phụ trợ

    Bạn có thể sử dụng một trong những cách sau để xác định Tiêu đề máy chủ lưu trữ mà Apigee Edge đã chuyển:

    Trace

    Cách xác định Tiêu đề máy chủ bằng cách sử dụng Dấu vết:

    1. Đảm bảo rằng faultstring chứa Proxy refused to create tunnel with response status 403 bằng cách sử dụng dấu vết như giải thích trong phần Các bước chẩn đoán thường gặp.
    2. Chuyển đến giai đoạn Đã bắt đầu quy trình yêu cầu mục tiêu rồi xem xét phần Tiêu đề của yêu cầu
    3. Xác minh giá trị của tên máy chủ được chỉ định trong Host header (Tiêu đề máy chủ) trong mục Request Headers (Tiêu đề yêu cầu).
    4. Nếu tiêu đề Máy chủ chứa tên máy chủ proxy, thì đó chính là nguyên nhân gây ra lỗi này.
    5. Điều này là do tường lửa được định cấu hình trên máy chủ phụ trợ để chỉ chấp nhận yêu cầu nếu Tiêu đề máy chủ lưu trữ chứa tên của máy chủ phụ trợ.
    6. Vì vậy, khi máy chủ proxy cố gắng tạo đường hầm với máy chủ phụ trợ, máy chủ sẽ không thành công với lỗi

      Proxy refused to create tunnel with response status 403.

      Dấu vết mẫu cho thấy Tiêu đề máy chủ có tên máy chủ proxy

      ( xem hình ảnh lớn hơn)

      Trong dấu vết mẫu nêu trên, bạn thấy Tiêu đề máy chủ chứa tên của máy chủ proxy www.proxyserver.com. Vì có một quy tắc hạn chế về tường lửa được định cấu hình trên máy chủ phụ trợ và máy chủ phụ trợ chỉ muốn tên máy chủ lưu trữ phụ trợ được chứa trong Tiêu đề máy chủ, nên bạn sẽ gặp lỗi Proxy refused to create tunnel with response status 403.

    tcpdump

    Để xác định Tiêu đề máy chủ lưu trữ bằng tcpdump

    1. Ghi lại tcpdump trên máy chủ proxy cho các yêu cầu đến từ thành phần Trình xử lý tin nhắn của Apigee Edge bằng lệnh sau:

      tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
      

      Để biết thêm thông tin về cách sử dụng lệnh tcpdump, hãy xem phần tcpdump.

    2. Phân tích dữ liệu tcpdump bằng công cụ Wireshark hoặc một công cụ tương tự.
    3. Dưới đây là bản phân tích mẫu về tcpdump bằng Wireshark:

      ( xem hình ảnh lớn hơn)

    4. Các số gói 13, 1415 cho biết Bộ xử lý thông báo đang thiết lập kết nối với máy chủ proxy thông qua quy trình bắt tay TCP ba chiều.
    5. Trong gói 16, Trình xử lý thông báo đã kết nối với máy chủ proxy httpbin.org (minh hoạ trong ví dụ trên).
    6. Chọn gói 16 và kiểm tra nội dung chi tiết của gói, cụ thể là Tiêu đề máy chủ lưu trữ đang được Bộ xử lý thông báo chuyển đến máy chủ proxy.

    7. Mẫu ở trên cho thấy Host Header (Tiêu đề máy chủ) httpin.org. Đây là tên máy chủ của máy chủ proxy. Do đó, khi máy chủ proxy cố gắng tạo đường hầm với máy chủ phụ trợ bằng cách truyền Tiêu đề máy chủ httpin.org ở trên, máy chủ sẽ không thành công do lỗi Proxy refused to create tunnel with response status 403.

Độ phân giải

Tình huống: Hạn chế tường lửa trên máy chủ proxy dự kiến Tiêu đề máy chủ phải luôn chứa tên máy chủ phụ trợ

Nếu bạn chắc chắn rằng lỗi này xảy ra do tường lửa trên máy chủ phụ trợ được định cấu hình sao cho Tiêu đề máy chủ phải luôn chứa tên máy chủ backend, trong khi Trình xử lý thông báo đang gửi tên máy chủ backend, hãy thực hiện các bước sau để giải quyết vấn đề:

  1. Đặt thuộc tính use.proxy.host.header.with.target.uri thành true trong TargetEndpoint như trong ví dụ sau:

    Cấu hình TargetEndpoint mẫu:

    <TargetEndpoint name="default">
      <HTTPTargetConnection>
        <URL>https://mocktarget.apigee.net/json</URL>
        <Properties>
          <Property name="use.proxy.host.header.with.target.uri">true</Property>
        </Properties>
      </HTTPTargetConnection>
    </TargetEndpoint>
    
  2. Đảm bảo rằng các thuộc tính khác liên quan đến Proxy chuyển tiếp được định cấu hình trên Trình xử lý thông báo như sau:

    1. Xem lại tệp /opt/apigee/customer/application/message-processor.properties trên từng Bộ xử lý tin nhắn.
    2. Đảm bảo rằng bạn đặt các thuộc tính sau theo trường hợp sử dụng hoặc yêu cầu của bạn:

      Giá trị mẫu cho tài sản:

      conf_http_HTTPClient.use.proxy=true
      conf/http.properties+HTTPClient.proxy.type=HTTP
      conf/http.properties+HTTPClient.proxy.host=PROXY_SERVER_HOST_NAME
      conf/http.properties+HTTPClient.proxy.port=PORT_#
      conf/http.properties+HTTPClient.proxy.user=USERNAME
      conf/http.properties+HTTPClient.proxy.password=PASSWORD
      

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 Bộ phận hỗ trợ Apigee:

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, ENVPORT# được thay bằng 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