Antipattern: Menentukan beberapa host virtual dengan alias host dan nomor port yang sama

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Di Apigee Edge, Router menangani semua traffic API masuk. Artinya, semua permintaan HTTP dan HTTPS ke proxy API Edge pertama-tama ditangani oleh Edge Router. Oleh karena itu, permintaan proxy API harus diarahkan ke alamat IP dan port terbuka di Router.

Host virtual memungkinkan Anda menghosting beberapa nama domain di satu server atau grup server. Untuk Edge, server sesuai dengan Edge Router. Dengan menentukan host virtual di Router, Anda dapat menangani permintaan ke beberapa domain.

Host virtual di Edge menentukan protokol (HTTP atau HTTPS), beserta alias host dan port Router. Alias host biasanya adalah nama domain DNS yang dipetakan ke alamat IP Router.

Misalnya, gambar berikut menunjukkan Router dengan dua definisi host virtual:

Dalam contoh ini, ada dua definisi host virtual. Satu menangani permintaan HTTPS di domain domainName1, yang lain menangani permintaan HTTP di domainName2.

Pada permintaan ke proxy API, Router membandingkan header Host dan nomor port permintaan yang masuk dengan daftar alias host yang ditentukan oleh semua host virtual untuk menentukan host virtual mana yang menangani permintaan.

Contoh konfigurasi untuk host virtual ditampilkan di bawah ini:

contoh konfigurasi vhost

Anti-pola

Menentukan beberapa host virtual dengan alias host dan nomor port yang sama di lingkungan yang sama/berbeda dalam organisasi atau di seluruh organisasi akan menyebabkan kebingungan saat merutekan permintaan API dan dapat menyebabkan error/perilaku yang tidak terduga.

Mari kita gunakan contoh untuk menjelaskan implikasi dari memiliki beberapa host virtual dengan alias host yang sama.

Misalkan ada dua host virtual sandbox and secure yang ditentukan dengan alias host yang sama, yaitu api.company.abc.com di lingkungan:

vhost dengan alias yang sama

Dengan penyiapan di atas, ada dua skenario seperti yang dijelaskan di bagian berikut.

Skenario 1 : Proxy API dikonfigurasi untuk menerima permintaan hanya ke satu sandbox host virtual

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

Dalam skenario ini, saat aplikasi klien melakukan panggilan ke Proxy API tertentu menggunakan alias host api.company.abc.com, aplikasi tersebut akan sesekali mendapatkan error 404 dengan pesan:

Unable to identify proxy for host: secure 

Hal ini karena Router mengirimkan permintaan ke host virtual sandbox dan secure. Saat permintaan dirutekan ke host virtual sandbox, aplikasi klien akan mendapatkan respons yang berhasil. Namun, saat permintaan dirutekan ke host virtual secure, aplikasi klien akan mendapatkan error 404 karena Proxy API tidak dikonfigurasi untuk menerima permintaan di host virtual secure.

Skenario 2 : Proxy API dikonfigurasi untuk menerima permintaan ke sandbox host virtual dan yang aman

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

Dalam skenario ini, saat aplikasi klien melakukan panggilan ke Proxy API tertentu menggunakan alias host api.company.abc.com, aplikasi tersebut akan mendapatkan respons yang valid berdasarkan logika proxy.

Namun, hal ini menyebabkan data yang salah disimpan di Analytics karena permintaan API dirutekan ke kedua host virtual, sementara permintaan sebenarnya dimaksudkan untuk dikirim hanya ke satu host virtual.

Hal ini juga dapat memengaruhi informasi logging dan data lain yang didasarkan pada host virtual.

Dampak

  1. Error 404 karena permintaan API dapat dirutekan ke host virtual yang tidak dikonfigurasi untuk menerima permintaan API Proxy.
  2. Data Analytics salah karena permintaan API dirutekan ke semua host virtual yang memiliki alias host yang sama, padahal permintaan hanya dibuat untuk host virtual tertentu.

Praktik Terbaik

  • Jangan tentukan beberapa host virtual dengan alias host dan nomor port yang sama di lingkungan yang sama, atau lingkungan yang berbeda dalam suatu organisasi.
  • Jika ada kebutuhan untuk menentukan beberapa host virtual, gunakan alias host yang berbeda di setiap host virtual seperti yang ditunjukkan di bawah:

    dua vhost

Bacaan lebih lanjut