Apakah Server Web Hanya Memiliki Satu Situs Web Masing-Masing?
Ketika Anda pertama kali mulai mempelajari bagaimana nama domain, alamat IP, server web, dan situs web semuanya cocok dan bekerja bersama, itu bisa sedikit membingungkan atau membingungkan. Bagaimana semuanya diatur agar bekerja dengan lancar? Posting Tanya Jawab Pengguna Super hari ini memiliki jawaban atas pertanyaan pembaca yang penasaran.
Sesi Tanya Jawab hari ini datang kepada kami berkat SuperUser-subdivisi Stack Exchange, pengelompokan situs web Q&A berbasis komunitas.
Foto milik Rosmarie Voegtli (Flickr).
Pertanyaan
SuperUser reader user3407319 ingin tahu apakah server web masing-masing hanya memegang satu situs web:
Berdasarkan apa yang saya pahami tentang DNS dan menghubungkan nama domain dengan alamat IP dari server web tempat sebuah situs web disimpan, apakah itu berarti setiap server web hanya dapat memiliki satu situs web? Jika server web memiliki lebih dari satu situs web, lalu bagaimana caranya semua diselesaikan sehingga saya dapat mengakses situs web yang saya inginkan tanpa masalah atau campur aduk?
Apakah server web masing-masing hanya memegang satu situs web, atau lebih banyak?
Jawabannya
Kontributor SuperUser, Bob, memiliki jawaban untuk kita:
Pada dasarnya, browser menyertakan nama domain dalam permintaan HTTP sehingga server web tahu domain mana yang diminta dan dapat meresponsnya.
Permintaan HTTP
Berikut adalah bagaimana permintaan HTTP khas Anda terjadi:
1. Pengguna menyediakan URL, dalam bentuk http: // host: port / path.
2. Browser mengekstrak bagian host (domain) dari URL dan menerjemahkannya ke alamat IP (jika perlu) dalam proses yang dikenal sebagai resolusi nama. Terjemahan ini dapat terjadi melalui DNS, tetapi tidak harus (misalnya, file host lokal pada sistem operasi umum memotong DNS).
3. Browser membuka koneksi TCP ke port yang ditentukan, atau default ke port 80 pada alamat IP itu.
4. Browser mengirim permintaan HTTP. Untuk HTTP / 1.1, tampilannya seperti ini:
Header host adalah standar dan diperlukan dalam HTTP / 1.1. Itu tidak ditentukan dalam spesifikasi HTTP / 1.0, tetapi beberapa server tetap mendukungnya.
Dari sini, server web memiliki beberapa informasi yang dapat digunakan untuk memutuskan apa yang seharusnya menjadi respons. Perhatikan bahwa dimungkinkan untuk satu server web terikat ke beberapa alamat IP.
- Alamat IP yang diminta, dari soket TCP (alamat IP klien juga tersedia, tetapi ini jarang digunakan, dan kadang-kadang untuk memblokir / memfilter)
- Port yang diminta, dari soket TCP
- Nama host yang diminta, sebagaimana ditentukan dalam header host oleh browser dalam permintaan HTTP
- Jalur yang diminta
- Header lainnya (cookie, dll.)
Seperti yang Anda perhatikan, pengaturan hosting bersama yang paling umum saat ini menempatkan banyak situs web pada satu alamat IP: kombinasi port, hanya menyisakan host untuk membedakan antara situs web.
Ini dikenal sebagai Host Virtual Berbasis-Nama di Apache-land, sementara Nginx memanggil mereka Nama Server di Blok Server, dan IIS lebih suka Virtual Server.
Bagaimana dengan HTTPS?
HTTPS sedikit berbeda. Semuanya identik dengan pembentukan koneksi TCP, tetapi setelah itu terowongan TLS terenkripsi harus dibuat. Tujuannya adalah untuk tidak membocorkan informasi tentang permintaan tersebut.
Untuk memverifikasi bahwa server web benar-benar memiliki domain ini, server web harus mengirim sertifikat yang ditandatangani oleh pihak ketiga yang tepercaya. Browser kemudian akan membandingkan sertifikat ini dengan domain yang diminta.
Ini menimbulkan masalah. Bagaimana server web mengetahui host / sertifikat situs web mana yang harus dikirim jika perlu melakukan ini sebelum permintaan HTTP diterima?
Secara tradisional, ini diselesaikan dengan memiliki alamat IP khusus (atau port) untuk setiap situs web yang membutuhkan HTTPS. Jelas, ini menjadi masalah karena kami kehabisan alamat IPv4.
Masukkan SNI (Indikasi Nama Server). Browser sekarang melewati nama host selama negosiasi TLS, sehingga server web memiliki informasi ini cukup awal untuk mengirim sertifikat yang benar. Di sisi server web, konfigurasi sangat mirip dengan bagaimana virtual host HTTP dikonfigurasikan.
Kelemahannya adalah nama host sekarang disahkan sebagai teks biasa sebelum enkripsi, dan pada dasarnya adalah informasi yang dibocorkan. Ini biasanya dianggap sebagai trade-off yang dapat diterima meskipun mengingat nama host biasanya diekspos dalam permintaan DNS.
Bagaimana Jika Anda Meminta Situs Web Hanya dengan Alamat IP?
Apa yang server web lakukan ketika tidak tahu host spesifik mana yang Anda minta tergantung pada implementasi dan konfigurasi server web. Biasanya, ada situs web “default”, “catch-all”, atau “back back” yang ditentukan yang akan memberikan respons terhadap semua permintaan yang tidak secara spesifik menentukan host.
Situs web default ini dapat berupa situs web independennya sendiri (sering menampilkan pesan kesalahan), atau bisa juga situs web lain di server web tergantung pada preferensi admin server web.
Punya sesuatu untuk ditambahkan ke penjelasan? Berbunyi dalam komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang mengerti teknologi lainnya? Lihat utas diskusi lengkap di sini.