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 yang masuk. Artinya, semua permintaan HTTP dan HTTPS ke proxy Edge API akan ditangani terlebih dahulu oleh Router Edge. Oleh karena itu, permintaan proxy API harus diarahkan ke alamat IP dan port yang terbuka di Router.

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

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

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

Dalam contoh ini, ada dua definisi {i>virtual host<i}. Satu menangani permintaan HTTPS di domain domainName1, satunya lagi menangani permintaan HTTP di domainName2.

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

Contoh konfigurasi untuk virtual host ditampilkan di bawah ini:

contoh konfigurasi vhost

Antipola

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

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

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

vhosts dengan alias yang sama

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

Skenario 1 : Proxy API dikonfigurasi untuk menerima permintaan hanya ke salah 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 klien sesekali akan mendapatkan error 404 dengan pesan:

Unable to identify proxy for host: secure 

Hal ini dikarenakan Router mengirim permintaan ke host virtual sandbox dan secure. Ketika permintaan dirutekan ke host virtual sandbox, aplikasi klien akan mendapatkan respons yang berhasil. Namun, jika permintaan diarahkan ke host virtual secure, aplikasi klien akan mengalami error 404 karena Proxy API tidak dikonfigurasi untuk menerima permintaan pada host virtual secure.

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

<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 klien 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, sedangkan permintaan sebenarnya ditujukan 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 tempat Proxy API mungkin tidak dikonfigurasi untuk menerima permintaan tersebut.
  2. Data Analytics salah karena permintaan API dirutekan ke semua host virtual yang memiliki alias host yang sama, sedangkan permintaan dibuat hanya untuk host virtual tertentu.

Praktik Terbaik

  • Jangan menetapkan beberapa host virtual dengan alias host dan nomor port yang sama di lingkungan yang sama, atau lingkungan organisasi yang berbeda.
  • Jika perlu untuk menentukan beberapa host virtual, gunakan alias host yang berbeda di setiap host virtual seperti yang ditunjukkan di bawah ini:

    dua vhost

Bacaan lebih lanjut