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 API gửi đến. Tức là tất cả các yêu cầu HTTP và HTTPS đến một proxy API Edge đều được Bộ định tuyến Edge xử lý trước tiên. Do đó, yêu cầu proxy API phải được hướng đến địa chỉ IP và cổng mở trên Bộ định tuyến.

Máy chủ ả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 các máy chủ ảo trên Bộ định tuyến, bạn có thể xử lý các yêu cầu tới 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 của máy chủ. Bí danh của máy chủ lưu trữ thường là 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 cho thấy một Bộ định tuyến với 2 định nghĩa máy chủ ảo:

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

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

Cấu hình mẫu cho máy chủ ảo được trình bày bên dưới:

cấu hình vhost mẫu

Phản mẫu

Việc xác định nhiều máy chủ ảo có cùng tên đại diện của máy chủ và số cổng trong cùng một môi trường/nhiều tổ chức hoặc giữa các tổ chức sẽ gây nhầm lẫn khi đị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 ví dụ để giải thích ý nghĩa của việc có nhiều máy chủ ảo có cùng email đại diện của máy chủ.

Hãy lưu ý rằng có hai máy chủ ảo sandbox and secure được xác định bằng cùng một email đại diện của máy chủ, tức là api.company.abc.com trong môi trường:

vhost có cùng bí danh

Với cách thiết lập như 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 hộp cát máy chủ ảo

<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 thực hiện lệnh gọi đến Proxy API cụ thể bằng bí danh máy chủ api.company.abc.com, các ứng dụng đó sẽ không liên tục nhận được thông báo lỗi 404:

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ả máy chủ ảo sandboxsecure. Khi yêu cầu được chuyển đến máy chủ ảo sandbox, các ứng dụng khách sẽ nhận được phản hồi thành công. Tuy nhiên, khi yêu cầu được chuyển đến máy chủ ảo secure, các ứng dụng 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 : Một 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 lẫn 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 thực hiện lệnh gọi đến Proxy API cụ thể bằng bí danh của máy chủ api.company.abc.com, các ứng dụng đó 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ỉ được gửi đến một máy chủ ảo.

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

Mức độ tác động

  1. Lỗi 404 lỗi do yêu cầu API có thể được định tuyến đến máy chủ ảo mà Proxy API có thể không đượ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 định tuyến đến tất cả máy chủ ảo có cùng bí danh máy chủ, trong khi các yêu cầu đó chỉ được gửi cho một máy chủ ảo cụ thể.

Phương pháp hay nhất

  • Không xác định nhiều máy chủ ảo có tên đại diện của máy chủ và số cổng giống nhau trong cùng một môi trường hoặc nhiều môi trường 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 nhiều biệt hiệu máy chủ ảo trong từng máy chủ ảo như sau:

    hai vhost

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