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 khách sẽ nhận được mã trạng thái HTTP 503 Service Unavailable kèm theo mã 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 sẽ 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à tạo đườ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 proxy như được giải thích trong Định cấu hình proxy chuyển tiếp. Máy chủ proxy mở một trang web bảo mật (HTTPS) hoặc không bảo mật Kết nối (HTTP) với máy chủ phụ trợ tuỳ thuộc vào loại proxy (được biểu thị) do tài sản HTTPClient.proxy.type) sử dụng và chuyể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 kỹ thuật tạo đường hầm cho mọi lưu lượng truy cập. Để tắt kỹ thuật tạo đường hầm, thuộc tính này Bạn cần đặt 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 bất kỳ các sự cố như tường lửa, hạn chế ACL (Danh sách kiểm soát truy cập), sự cố DNS, máy chủ phụ trợ tình trạng không có sẵn, hết thời gian chờ, v.v.

Thường thì mã trạng thái trong faultstring của phản hồi từ Apigee Edge chỉ ra nguyên nhân có thể gây ra lỗi ở mức độ cao.

Mẫu chuỗi liên kết:

Proxy refused to create tunnel with response status STATUS_CODE

Các nguyên nhân có thể xảy ra đối với một số mã trạng thái 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 Mô tả
Proxy đã từ chối tạo đường hầm có 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ế của tường lửa hoặc ACL được định cấu hình trên máy chủ phụ trợ ngăn việc tạo đường hầm.

Proxy đã từ chối tạo đường hầm có 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ế về tường lửa, máy chủ phụ trợ tình trạng không có sẵn, ngăn cản việc tạo đường hầm

Proxy đã từ chối tạo đường hầm có 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 được ghi nhận trong faultstring, bạn cần sử dụng 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ố vấn đề 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ỳ tường lửa hoặc ACL nào (Quyền truy cập Control List) hạn chế được định cấu hình trên máy chủ phụ trợ khiến đường hầm không được được tạo giữa Apigee Edge và máy chủ phụ trợ bằng máy chủ proxy.

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 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ữ máy chủ phụ trợ trong tiêu đề Host. Chỉ 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 phiên theo dõi và hoặc:
    • 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 với 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ả 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 vị trí lỗi đã xảy ra.
  5. Thông thường, bạn sẽ thấy lỗi này sau giai đoạn Target request Flow required (Đã 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:

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

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

    ( 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 rằng lỗi này là do đường hầm proxy không tạo được 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 tư, bạn có thể sử dụng nhật ký truy cập NGINX để xác định thông tin chính về 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 thế bằng các giá trị thực tế.

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

    Lỗi 503 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-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 có 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 Các bước chẩn đoán thường gặp.
  2. Xem lại Thông báo lỗi và xác định mã trạng thái biểu thị trong faultstring về 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à không có đủ quyền hoặc đặc quyền để tạo đường hầm. Điều này có thể thường 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 truy cập) nào ngăn việc tạo đường hầm.
  5. Xem lại mọi quy tắc 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ủ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 quy tắc hạn chế ACL, bạn cần khắc phục sự cố một cách phù hợp.
  7. Hãy xem ví dụ về một hạn chế đối với tường lửa để giải thích cách khắc phục sự cố và giải quyết vấn đề này vấn đề:

    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 luôn chứa tên máy chủ lưu trữ của máy chủ phụ trợ

    Bạn có thể dùng một trong những cách sau để xác định Tiêu đề máy chủ mà Apigee Edge truyền qua:

    Trace

    Cách xác định Tiêu đề máy chủ lưu trữ bằng tính năng Theo dõi:

    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 Các bước chẩn đoán thường gặp.
    2. Chuyển đến giai đoạn Đã bắt đầu Luồng yêu cầu mục tiêu và xem xét 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 Tiêu đề máy chủ lưu trữ trong Tiêu đề của yêu cầu.
    4. Nếu tiêu đề Máy chủ lưu trữ chứa tên máy chủ 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ấp nhận chỉ yêu cầu nếu Tiêu đề máy chủ lưu trữ chứa tên 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ợ, không thành công với lỗi này

      Proxy refused to create tunnel with response status 403.

      Dấu vết mẫu cho thấy Tiêu đề máy chủ lưu trữ 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, cho thấy Tiêu đề máy chủ lưu trữ chứa tên của máy chủ proxy www.proxyserver.com. Vì có một hạn chế 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ủ lưu trữ của máy chủ phụ trợ trong Tiêu đề máy chủ lưu trữ, thì bạn sẽ nhận được lỗi Proxy refused to create tunnel with response status 403.

    tcpdump

    Để xác định Tiêu đề máy chủ 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 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 tcpdump.

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

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

    4. Số gói tin 13, 1415 cho thấy Thông báo Bộ xử lý đang thiết lập kết nối với máy chủ proxy thông qua TCP ba chiều quy trình bắt tay.
    5. Trong gói 16, Trình xử lý thư đã 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 của gói một cách chi tiết và cụ thể là Tiêu đề máy chủ lưu trữ được chuyển đến máy chủ proxy bởi Thông báo Bộ xử lý.

    7. Mẫu ở trên cho thấy Tiêu đề máy chủ lưu trữ httpin.org, 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ữ ở trên httpin.org, không thành công với 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 rằng Tiêu đề máy chủ phải được 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 là 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ủ lưu trữ (Host Header) phải luôn chứa máy chủ phụ trợ tên máy chủ lưu trữ của mình, trong khi Trình xử lý thư đang gửi tên máy chủ máy chủ proxy, sau đó thực hiện các bước sau đây để 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ư như sau:

    1. Xem lại tệp /opt/apigee/customer/application/message-processor.properties trên từng Trình xử lý tin nhắn.
    2. Hãy đảm bảo rằng bạn đã thiết lập 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 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 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 Đá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~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ý thư

    /opt/apigee/var/log/edge-message-processor/logs/system.log
    

Tài liệu tham khảo