Ada satu pertanyaan yang sering bikin orang bingung pas pertama kali memikirkannya: kalau kamu punya satu server dengan satu alamat IP, gimana caranya dia bisa meng-hosting johndoe.com dan janedoe.com dan belasan website lain yang tidak saling berhubungan sekaligus — masing-masing tampil dan berperilaku seperti pulau kecilnya sendiri? Wajar kalau kamu mengira tiap situs butuh mesinnya sendiri. Padahal tidak. Trik yang bikin ini mungkin namanya virtual host, dan ini salah satu ide penting yang diam-diam menjaga hosting tetap murah dan internet tetap masuk akal secara biaya.
Begitu kamu paham virtual host, beberapa teka-teki langsung terjawab sekaligus: kenapa shared hosting bisa menjejalkan ratusan pelanggan ke satu mesin, kenapa salah ketik di pengaturan DNS-mu kadang malah membawamu ke website orang asing, dan kenapa web server harus membaca sebagian dari tiap permintaan sebelum dia tahu situs mana yang sebenarnya kamu minta. Yuk kita bedah pelan-pelan.
Virtual host itu sebenarnya apa
Virtual host (kadang disingkat vhost) adalah konfigurasi yang memberi tahu satu web server, “kalau ada permintaan masuk untuk domain ini, layani berkas ini dengan pengaturan ini.” Kamu bisa mendefinisikan virtual host sebanyak yang kamu mau di satu server, dan masing-masing akan berperilaku seperti website terpisah — punya document root sendiri (folder tempat berkasnya tinggal), log sendiri, aturan sendiri.
Kata virtual di sini punya peran besar. Sebenarnya cuma ada satu server fisik dan satu program web server yang berjalan, tapi di mata dunia luar kelihatannya seperti banyak situs yang mandiri. Bukan berarti ada yang dipalsukan — tiap situs memang benar-benar dapat jatah konfigurasinya masing-masing. Cuma saja semuanya dilayani oleh software yang sama di mesin yang sama, bergantian berdasarkan siapa yang sedang bertanya.
Kalau kamu sudah baca soal apa itu web server, ini adalah lapisan lanjutannya yang alami: web server itu program yang menunggu permintaan, dan virtual host adalah cara satu program itu mengurus banyak situs sekaligus.
Satu server banyak situs — dan kebalikannya juga ada
Virtual host menyelesaikan masalah “banyak situs di satu server”. Ada juga susunan yang persis kebalikannya: satu situs disebar ke banyak server (untuk trafik yang terlalu besar buat satu mesin). Itu alat yang berbeda — sebuah reverse proxy atau load balancer yang berdiri di depan. Jangan sampai tertukar. Virtual host menjejalkan situs ke dalam; yang satunya menyebar satu situs ke luar.
Masalah yang dipecahkan virtual host
Biar kelihatan kenapa virtual host itu penting, bayangkan dulu alternatifnya. Di masa awal web, model paling sederhana di kepala adalah: satu website = satu server = satu alamat IP. Kalau kamu mau meng-hosting lima situs, ya kamu butuh lima mesin, atau setidaknya lima alamat IP yang terpisah.
Pola itu tidak bisa berkembang. Alamat IP (apalagi jenis IPv4 yang lebih lama) itu sumber daya yang terbatas dan mahal. Server pun jadi banyak menganggur cuma untuk melayani satu website kecil. Dan menghidupkan satu mesin penuh untuk tiap blog mungil bakal bikin hosting jadi luar biasa mahal. Web bakal kelihatan sangat berbeda — mungkin jauh lebih kecil — seandainya tiap domain menuntut perangkat kerasnya sendiri.
Virtual host memutus rantai satu-lawan-satu itu. Sekarang modelnya jadi: satu server, satu IP, banyak situs. Sebuah mesin sederhana bisa dengan nyaman meng-hosting ratusan website bertrafik rendah, masing-masing benar-benar terpisah secara konfigurasi, sambil berbagi perangkat keras yang sama di bawahnya. Inilah seluruh dasar ekonomi dari shared hosting, dan alasan besar kenapa menerbitkan website online cuma butuh beberapa dolar sebulan, bukan ratusan.
Bagaimana server tahu situs mana yang kamu minta
Ini bagian yang cerdik, dan layak kamu lambatkan dulu bacanya. Kalau sepuluh domain semuanya mengarah ke alamat IP yang sama, lalu ada permintaan datang ke IP itu, gimana server tahu kamu mau johndoe.com atau janedoe.com? Alamat IP-nya identik untuk keduanya. Koneksinya pun kelihatan sama persis.
Jawabannya ada di dalam permintaannya sendiri. Saat browser-mu membuat permintaan HTTP, dia menyertakan satu potongan informasi kecil bernama Host header — isinya benar-benar menyebut domain mana yang kamu ketik. Permintaan mentahnya kira-kira begini:
GET /about HTTP/1.1
Host: janedoe.com
User-Agent: ...
Accept: text/html
Baris Host: janedoe.com itulah kunci dari semuanya. Browser sudah tahu domain mana yang sedang kamu kunjungi, jadi dia memberi tahu server secara terang-terangan. Web server membaca header itu, menelusuri daftar virtual host-nya untuk mencari satu yang namanya cocok dengan janedoe.com, lalu melayani berkas dari situs itu. Coba ketik johndoe.com, dan server yang sama akan membaca Host header yang berbeda lalu melayani situs yang sama sekali lain — dari IP yang sama, program yang sama, perangkat keras yang sama.
┌─────────────────────────────┐
browser minta │ SATU SERVER │
janedoe.com │ (satu alamat IP) │
│ │ │
│ Host: janedoe.com ┌──────────────────────┐ │
└───────────────────► │ cocokkan Host header │ │
│ └──────────────────────┘ │
│ │ │
│ ├─ johndoe.com → /sites/john │
│ ├─ janedoe.com → /sites/jane ◄─┘ layani ini
│ └─ shop.example → /sites/shop
└─────────────────────────────┘
Pendekatan ini disebut virtual hosting berbasis nama (name-based), karena server memilih situs berdasarkan nama yang ada di Host header. Beginilah mayoritas besar website di-hosting sekarang.
Inilah kenapa record DNS yang salah membawamu ke situs orang lain
Pernah mengarahkan domain baru ke server hosting lalu malah dapat website orang asing, atau halaman generik “it works!”? Itu virtual hosting berbasis nama yang sedang jujur sama kamu. Permintaan domain-mu sudah sampai ke server, tapi belum ada virtual host yang dikonfigurasi untuk nama itu — jadi server jatuh ke situs default-nya. Solusinya: tambahkan virtual host yang cocok dengan domain-mu. Server-nya tidak rusak; dia cuma belum mengenali namanya.
Berbasis nama vs berbasis IP
Ada dua cara menjalankan virtual host, dan bedanya terletak pada apa yang dipakai server untuk membedakan situs satu dengan yang lain.
Virtual hosting berbasis nama adalah pilihan default zaman sekarang. Semua domain-mu berbagi satu alamat IP, dan server membedakannya murni dari Host header di tiap permintaan, persis seperti yang barusan kita bahas. Cara ini murah (satu IP, situs tak terbatas) dan fleksibel. Satu-satunya syarat adalah client harus mengirim Host header — yang sudah otomatis dilakukan tiap browser selama dua puluh tahun lebih terakhir, jadi praktiknya bukan masalah sama sekali.
Virtual hosting berbasis IP adalah pendekatan yang lebih lama. Di sini tiap situs dapat alamat IP-nya sendiri di mesin yang sama, dan server memutuskan situs mana yang dilayani berdasarkan IP mana yang menerima koneksi — tanpa perlu Host header. Cara ini masih jalan, tapi dia menghabiskan satu alamat IP yang langka per situs, jadi sekarang disimpan untuk kasus khusus saja, bukan hosting sehari-hari.
BERBASIS NAMA BERBASIS IP
satu IP, banyak nama banyak IP, satu nama tiap IP
203.0.113.10 ──┬── johndoe.com 203.0.113.10 ── johndoe.com
├── janedoe.com 203.0.113.11 ── janedoe.com
└── shop.example 203.0.113.12 ── shop.example
server baca Host header server baca IP tujuan
Untuk hampir semua yang bakal kamu bangun, berbasis nama adalah pilihan yang tepat dan jelas. Berbasis IP bertahan kebanyakan karena alasan warisan lama atau kebutuhan teknis yang sempit.
Trafik terenkripsi menambah satu kerumitan — dan solusinya sudah dibawa sejak awal
Ada jebakan halus pada koneksi aman (HTTPS). Host header itu tinggal di dalam permintaan yang terenkripsi, padahal server harus menyiapkan enkripsi lebih dulu sebelum bisa membaca apa pun di dalamnya — masalah ayam-dan-telur. Lalu gimana server tahu sertifikat situs mana yang harus dia tunjukkan? Jawabannya SNI (Server Name Indication): saat handshake awal, client mengumumkan nama domain secara terbuka, sebelum enkripsi dimulai, supaya server bisa memilih sertifikat yang tepat untuk virtual host itu. Tiap client dan server modern sudah mendukung SNI, jadi virtual hosting berbasis nama berjalan mulus di atas HTTPS sekarang. Kamu biasanya cuma berkenalan dengan nama “SNI” saat ada yang bermasalah seputar sertifikat.
Apa saja yang ada di dalam satu virtual host
Menyebut virtual host sebagai “pengaturan sebuah website” itu memang benar, tapi masih kabur, jadi ayo kita buat konkret. Definisi virtual host yang umum biasanya menetapkan hal-hal seperti:
- Nama domain yang dia layani — misalnya
janedoe.comdan mungkinwww.janedoe.com. Inilah nama yang dicocokkan server dengan Host header. - Document root — folder di disk tempat berkas situs ini tinggal, seperti
/sites/jane. Permintaan untuk domain ini cuma akan membaca dari sini, dan itulah yang menjaga tiap situs tetap terpisah satu sama lain. - Logging — log akses dan log error-nya sendiri, supaya kamu bisa melihat trafik dan masalah tiap situs secara terpisah, bukan satu log raksasa yang kusut campur aduk.
- Perilaku khusus per situs — redirect, security header, sertifikat mana yang dipakai untuk HTTPS, halaman error, dan seterusnya. Tiap situs bisa disetel secara mandiri.
Secara konsep, satu virtual host pada dasarnya menyusut jadi blok konfigurasi kecil yang bacaannya hampir seperti label:
situs: janedoe.com
layani berkas dari: /sites/jane
log akses: /logs/jane-access.log
pakai sertifikat: janedoe.com
Tumpuk beberapa blok semacam itu di konfigurasi satu server, dan jadilah sebuah mesin yang diam-diam menjalankan banyak situs mandiri. Tambah satu blok lagi, muat ulang konfigurasinya, dan situs baru langsung hidup — tanpa perangkat keras tambahan, tanpa IP baru.
Tetap netral vendor di kepalamu
Tiap program web server menuliskan virtual host dengan cara yang berbeda — format berkas dan kata kuncinya beda-beda dari satu ke yang lain. Tapi konsepnya universal di semua: cocokkan Host header yang masuk (atau IP tujuan) ke situs yang sudah dikonfigurasi, lalu layani berkas situs itu dengan pengaturan situs itu. Pahami idenya sekali, dan dia berlaku di mana-mana; sintaks spesifiknya cuma detail yang tinggal kamu cari pas dibutuhkan.
Di mana posisi virtual host dalam gambaran besar
Virtual host jarang bekerja sendirian — dia satu lapisan dalam tumpukan yang mengantar permintaan dari browser pengunjung sampai ke berkas yang benar. Layak kamu lihat bagaimana potongan-potongannya saling terhubung.
Semuanya berawal dari DNS: sebuah nama domain diterjemahkan menjadi alamat IP, dan itulah cara browser tahu ke mana harus mengirim permintaannya sejak awal. Beberapa domain bisa mengarah ke IP yang sama — justru itulah yang bikin virtual hosting berbasis nama mungkin sama sekali. Permintaan berjalan ke IP itu, web server membaca Host header, virtual host yang cocok dipilih, dan akhirnya berkas yang benar (atau program yang benar) menangani jawabannya.
Pada susunan yang lebih besar, kamu sering bakal melihat sebuah reverse proxy berdiri di depan untuk menangani HTTPS dan mengarahkan permintaan, dengan virtual host tertata di belakangnya — tapi tugas intinya tidak pernah berubah: pakai nama yang diminta untuk menentukan situs mana yang menjawab. Entah kamu di shared hosting seharga satu dolar atau di platform multi-server yang serius, langkah pencocokan yang sama itu terjadi di tiap permintaan.
Penutup
Seluruh idenya dalam satu tempat:
- Virtual host membuat satu web server bisa berlaku seperti banyak website mandiri, masing-masing dengan berkas, log, dan pengaturannya sendiri — semua di satu mesin dan (biasanya) satu IP.
- Dia ada untuk memecahkan masalah skala: tanpanya, tiap situs butuh server atau IP-nya sendiri, yang bikin hosting jauh lebih mahal dan web jauh lebih kecil.
- Virtual hosting berbasis nama — default zaman sekarang — membedakan situs lewat Host header yang dikirim browser di tiap permintaan. Server mencocokkan nama itu dengan situs yang sudah dikonfigurasi.
- Virtual hosting berbasis IP adalah alternatif lama: satu IP khusus per situs, tanpa Host header. Masih jalan, tapi memboroskan IP yang langka, jadi langka dipakai sekarang.
- SNI adalah tambahan kecil yang bikin virtual hosting berbasis nama bisa jalan di atas HTTPS terenkripsi, dengan mengumumkan domain saat handshake agar sertifikat yang benar yang dilayani.
- Konsepnya netral vendor: cocokkan nama yang diminta (atau IP) ke sebuah situs, lalu layani isi situs itu. Cuma sintaks konfigurasinya yang beda antar web server.
Berikutnya, ada baiknya kita lihat bagaimana koneksi terenkripsi itu sebenarnya disiapkan sejak awal — sertifikat itu sebenarnya membuktikan apa, dan bagaimana SSL/TLS mengubah HTTP biasa menjadi HTTPS — karena itulah lapisan yang duduk tepat di atas semua yang sudah kita bahas di sini.