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

Ngoài ra, bạn có thể 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"
      }
   }
}

Uỷ quyền chuyển tiếp và đường hầm

Apigee Edge cho phép các proxy API của bạn giao tiếp với máy chủ phụ trợ thông qua một máy chủ proxy như được 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 bảo mật (HTTPS) hoặc không bảo mật (HTTP) đến máy chủ phụ trợ, tuỳ thuộc vào loại proxy (được biểu thị bằng thuộc tính HTTPClient.proxy.type) được dùng và truyền dữ liệu theo cả hai hướng. Đây được gọi là đường hầm.

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

Mã lỗi: protocol.http.ProxyTunnelCreationFailed

Apigee Edge 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 bất kỳ vấn đề nào, chẳng hạn như tường lửa, các quy định hạn chế về Danh sách kiểm soát quyền truy cập (ACL), các vấn đề về DNS, máy chủ phụ trợ không hoạt động, hết thời gian chờ, v.v.

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

Mẫu Faultstring:

Proxy refused to create tunnel with response status STATUS_CODE

Nguyên nhân có thể gây ra một số mã trạng thái xuất hiện trong faultstring:

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 chỉ ra trong faultstring:

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

403 - Forbidden

Điều này có thể xảy ra do các hạn chế về tường lửa hoặc ACL được định cấu hình trên máy chủ phụ trợ ngăn chặ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

Điều này có thể xảy ra do vấn đề về DNS, các hạn chế của tường lửa, việc máy chủ phụ trợ không hoạt động khiến bạn không tạo được đườ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 quá trình tạo đường hầm

Tuỳ thuộc vào mã trạng thái quan sát được trong faultstring, bạn cần sử dụng các kỹ thuật phù hợp để khắc phục vấn đề. Sổ tay này giải thích cách khắc phục vấn đề nếu bạn thấy 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ế nào về tường lửa hoặc ACL (Danh sách kiểm soát quyền truy cập) được định cấu hình trên máy chủ phụ trợ, khiến máy chủ proxy không thể tạo đường hầm giữa Apigee Edge và máy chủ phụ trợ.

Nguyên nhân 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 với 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ủ Proxy thay vì tên máy chủ Backend trong tiêu đề Host. Chỉ dành cho người dùng Edge 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:

Công cụ theo dõi

Cách chẩn đoán lỗi bằng công cụ Trace (Theo dõi):

  1. Bật phiên theo dõi và một trong hai lựa chọn sau:
    • 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 chế độ Show all FlowInfos (Hiện tất cả FlowInfo):

  3. 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.
  4. Đ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.
  5. Bạn thường sẽ thấy lỗi này sau giai đoạn Target Request Flow Started (Đã bắt đầu quy trình yêu cầu mục tiêu) như minh hoạ dưới đây:

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

    error: Proxy refused to create tunnel with response status 403

  6. 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 đó.
  7. Di chuyển xuống phần Tiêu đề phản hồi Thông tin chi tiết về giai đoạn và xác định các giá trị của X-Apigee-fault-codeX-Apigee-fault-source như minh hoạ dưới đây:

    ( 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ị của X-Apigee-fault-codeX-Apigee-fault-source lần lượt là protocol.http.ProxyTunnelCreationFailedtarget , cho biết lỗi này xảy ra do không tạo được đường hầm proxy vì không nhận được tiêu đề máy chủ lưu trữ 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, 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 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

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

  3. Tì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 thấy bất kỳ lỗi 503 nào có X-Apigee-fault-code khớp với giá trị của protocol.http.ProxyTunnelCreationFailed, hãy xác định giá trị của X-Apigee-fault-source.

    Ví dụ về lỗi 503 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-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 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ách sử dụng Trace Tool 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.
  2. Xem Thông báo lỗi và xác định mã trạng thái được chỉ ra trong faultstring khi không tạo được đường hầm.
  3. Trong trường hợp này, mã trạng thái là 403, tức 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. Điều này thường xảy ra nếu có bất kỳ hạn chế nào về tường lửa hoặc ACL (Danh sách kiểm soát quyền truy cập) ngăn việc tạo đường hầm.
  5. Kiểm tra mọi hạn chế về tường lửa và/hoặc ACL được định cấu hình trên máy chủ phụ trợ 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 các hạn chế về ACL, bạn cần khắc phục vấn đề một cách thích hợp.
  7. Hãy xem xét một ví dụ về 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ế của tường lửa trên máy chủ phụ trợ yêu cầu Tiêu đề máy chủ lưu trữ phải luôn chứa tên 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ữ do Apigee Edge truyền:

    Trace

    Cách xác định Tiêu đề máy chủ lưu trữ bằng Trace:

    1. Xác định 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ư được giải thích trong Các bước chẩn đoán thường gặp.
    2. Chuyển đến giai đoạn Target Request Flow Started và xem xét Request Headers (Tiêu đề yêu cầu)
    3. Xác minh giá trị của tên máy chủ được chỉ định trong Tiêu đề máy chủ lưu trữ trong phần Tiêu đề yêu cầu.
    4. Nếu tiêu đề Host chứa tên máy chủ lưu trữ proxy, thì đó 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 các 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ợ, thao tác này sẽ không thành công và xảy ra 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 mẫu dấu vết được hiển thị ở trên, dấu vết này cho thấy Tiêu đề máy chủ lưu trữ chứa tên của máy chủ lưu trữ proxy www.proxyserver.com. Vì có một hạn chế của tường lửa được định cấu hình trên máy chủ phụ trợ chỉ mong đợi tên máy chủ phụ trợ có trong Tiêu đề máy chủ lưu trữ, nên bạn sẽ gặp lỗi Proxy refused to create tunnel with response status 403.

    tcpdump

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

    1. Ghi lại một tcpdump trên máy chủ proxy cho các yêu cầu đến từ thành phần Message Processor 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 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. Sau đây là một ví dụ về việc phân tích tcpdump bằng Wireshark:

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

    4. Các gói số 13, 1415 cho thấy Trình 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ủ lưu trữ proxy httpbin.org (như trong ví dụ ở trên).
    6. Chọn gói 16 và xem xét chi tiết nội dung của gói, đặc biệt là Tiêu đề máy chủ lưu trữ được Bộ xử lý thông báo truyền đến máy chủ proxy.

    7. Mẫu trên cho thấy Tiêu đề máy chủ lưu trữ 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ủ lưu trữ httpin.org ở trên, máy chủ này sẽ gặp lỗi Proxy refused to create tunnel with response status 403.

Độ phân giải

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

Nếu bạn xác định được 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 tường lửa luôn mong đợi Tiêu đề máy chủ lưu trữ phải luôn chứa tên máy chủ phụ trợ, trong khi Trình xử lý thông báo đang gửi tên máy chủ máy chủ proxy, thì 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 xét tệp /opt/apigee/customer/application/message-processor.properties trên từng Trình xử lý thông báo.
    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 mình:

      Giá trị mẫu cho các thuộc tính:

      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 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 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~ENV.PORT#_access_log

    Trong đó: ORG, ENVPORT# đượ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

Tài liệu tham khảo