Antipattern: Xác định nhiều máy chủ ảo có cùng bí danh máy chủ và số cổng

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến Tài liệu về Apigee X.
thông tin

Trong Apigee Edge, một Bộ định tuyến sẽ xử lý tất cả lưu lượng truy cập đến API. Tức là tất cả HTTP và HTTPS các yêu cầu gửi đến proxy API của Edge sẽ do Bộ định tuyến Edge xử lý trước. Do đó, yêu cầu proxy API phải được hướng tới địa chỉ IP và cổng mở trên Bộ định tuyến.

Máy chủ lưu trữ ảo cho phép bạn lưu trữ nhiều tên miền trên một máy chủ hoặc một nhóm máy chủ. Đối với Edge, các máy chủ tương ứng với Bộ định tuyến Edge. Bằng cách xác định máy chủ ảo trên Bộ định tuyến, bạn có thể xử lý yêu cầu gửi đến nhiều miền.

Máy chủ ảo trên Edge xác định một giao thức (HTTP hoặc HTTPS), cùng với cổng Bộ định tuyến và bí danh máy chủ lưu trữ. Bí danh máy chủ thường là một tên miền DNS ánh xạ tới địa chỉ IP của Bộ định tuyến.

Ví dụ: hình ảnh sau đây hiển thị một Bộ định tuyến với hai định nghĩa máy chủ ảo:

Trong ví dụ này, có hai định nghĩa về máy chủ ảo. Một công ty xử lý các yêu cầu HTTPS trên miền domainName1, còn miền còn lại xử lý các yêu cầu HTTP trên domainName2.

Trong yêu cầu tới một proxy API, Bộ định tuyến so sánh tiêu đề Máy chủ lưu trữ và số cổng của hãy gửi yêu cầu đến danh sách bí danh máy chủ do tất cả máy chủ ảo xác định để xác định máy chủ ảo sẽ xử lý yêu cầu.

Dưới đây là cấu hình mẫu cho máy chủ ảo:

cấu hình vhost mẫu

Phản mẫu

Xác định nhiều máy chủ ảo có cùng bí danh máy chủ và số cổng ở cùng/khác nhau môi trường của một tổ chức hay trong toàn bộ tổ chức sẽ dẫn đến nhầm lẫn tại thời điểm định tuyến các yêu cầu API và có thể gây ra lỗi/hành vi không mong muốn.

Hãy dùng một ví dụ để giải thích hệ quả của việc có nhiều máy chủ ảo với cùng một bí danh máy chủ lưu trữ.

Giả sử có hai máy chủ ảo sandbox and secure đã xác định có cùng bí danh máy chủ lưu trữ, tức là api.company.abc.com trong môi trường:

các vhost có cùng bí danh

Với cách thiết lập ở trên, có thể có hai trường hợp như được mô tả trong các phần sau.

Trường hợp 1 : Proxy API được định cấu hình để chỉ chấp nhận các yêu cầu đến một trong các máy chủ ảo hộp cát máy chủ

<ProxyEndpoint name="default">
  ...
  <HTTPProxyConnection>
    <BasePath>/demo</BasePath>
    <VirtualHost>sandbox</VirtualHost>
  </HTTPProxyConnection>
  ...
</ProxyEndpoint>

Trong trường hợp này, khi các ứng dụng khách thực hiện lệnh gọi đến Proxy API cụ thể bằng bí danh máy chủ lưu trữ api.company.abc.com, thì họ sẽ thỉnh thoảng gặp lỗi 404 với thông báo:

Unable to identify proxy for host: secure 

Điều này là do Bộ định tuyến gửi yêu cầu đến cả sandboxsecure máy chủ ảo. Khi yêu cầu được định tuyến đến máy chủ ảo sandbox, các ứng dụng sẽ được ứng dụng sẽ nhận được phản hồi thành công. Tuy nhiên, khi yêu cầu được định tuyến đến máy chủ ảo secure, ứng dụng khách sẽ gặp lỗi 404 vì Proxy API không được định cấu hình để chấp nhận yêu cầu trên Máy chủ ảo secure.

Trường hợp 2 : Proxy API được định cấu hình để chấp nhận các yêu cầu đến cả hộp cát máy chủ ảo và tính năng bảo mật

<ProxyEndpoint name="default">
  ...
  <HTTPProxyConnection>
    <BasePath>/demo</BasePath>
    <VirtualHost>sandbox</VirtualHost>
    <VirtualHost>secure</VirtualHost>
  </HTTPProxyConnection>
  ...
</ProxyEndpoint>

Trong trường hợp này, khi các ứng dụng khách thực hiện lệnh gọi đến Proxy API cụ thể bằng bí danh máy chủ lưu trữ api.company.abc.com, họ sẽ nhận được phản hồi hợp lệ dựa trên logic proxy.

Tuy nhiên, điều này khiến dữ liệu không chính xác được lưu trữ trong Analytics vì các yêu cầu API được định tuyến đến cả máy chủ ảo, trong khi các yêu cầu thực tế chỉ nhằm mục đích gửi đến một máy chủ ảo.

Điều này cũng có thể ảnh hưởng đến thông tin ghi nhật ký và mọi dữ liệu khác dựa trên máy chủ ảo.

Tác động

  1. Lỗi 404 vì các yêu cầu API có thể được định tuyến đến máy chủ ảo mà Proxy API có thể không được chuyển đến được định cấu hình để chấp nhận yêu cầu.
  2. Dữ liệu Analytics không chính xác vì các yêu cầu API được chuyển đến tất cả máy chủ ảo có cùng một bí danh máy chủ lưu trữ trong khi các yêu cầu chỉ được thực hiện cho một máy chủ ảo cụ thể.

Phương pháp hay nhất

  • Đừng xác định nhiều máy chủ ảo có cùng bí danh máy chủ và số cổng trong cùng một môi trường, hoặc môi trường khác nhau của một tổ chức.
  • Nếu cần xác định nhiều máy chủ ảo, hãy sử dụng các bí danh máy chủ khác nhau trong mỗi máy chủ ảo các máy chủ ảo như được hiển thị dưới đây:

    hai vhost

Tài liệu đọc thêm