Ini adalah bagian dari konfigurasi host virtual yang perlu saya klarifikasi lebih lanjut tentang:
<VirtualHost *:80>
# Admin email, Server Name (domain name), and any aliases
ServerAdmin [email protected]
ServerName 141.29.495.999
ServerAlias example.com
...
Ini dan contoh konfigurasi, mirip dengan apa yang saya miliki saat ini (saya tidak memiliki nama domain saat ini).
<VirtualHost *:80>
- Izinkan pengaturan berikut untuk semua permintaan HTTP yang dibuat pada port 80 ke IP yang dapat dihubungi oleh server ini. Misalnya, jika server dapat diakses di lebih dari satu IP, Anda dapat membatasi arahan ini hanya untuk satu, bukan keduanya.
ServerName
- Jika bagian host dari permintaan HTTP cocok dengan nama ini, maka izinkan permintaan tersebut. Biasanya ini adalah nama domain yang memetakan ke IP, tetapi dalam hal ini host permintaan HTTP harus cocok dengan IP ini.
ServerAlias
- Nama alternatif diterima oleh server.
Bagian yang membingungkan bagi saya adalah, dalam skenario di atas, jika saya mengatur ServerAlias mytestname.com
dan kemudian membuat permintaan HTTP mytestname.com
, harus ada catatan DNS yang menunjuk ke IP server agar ini berfungsi? Dalam hal ini, apakah ServerAlias hanya pada dasarnya entri EXTRA ServerName?
Katakanlah saya punya entri DNS seperti itu foobar.com = 141.29.495.999
tetapi kemudian saya punya ServerName = 141.29.495.999
dan ServerAlias
kosong, apakah itu berarti bahwa meskipun foobar.com diselesaikan dengan IP yang tepat, karena tidak ada referensi untuk menerima foobar.com di ServerName
atau ServerAlias
?
Atau sesuatu. Astaga, aku bingung.
Jawaban:
Pikirkan seperti ini:
DNS adalah direktori telepon / halaman kuning. Ketika seseorang ingin memanggil telepon Anda, mereka dapat mencari nama Anda dan mendapatkan nomor telepon Anda dan memanggil telepon itu. DNS melakukan hal yang sama tetapi untuk komputer - ketika seseorang ingin pergi ke
www.example.com
mereka meminta DNS untuk alamat IP dan kemudian mereka dapat menghubungi komputer yang memiliki alamat IP itu. Itulah yang dimaksud tekad . Memecahkan alamat IP sama sekali tidak ada hubungannya dengan Apache; ini hanyalah pertanyaan DNS.The
ServerName
danServerAlias
lebih seperti daftar telepon internal perusahaan. Server web Anda adalah switchboard; itu akan menerima semua koneksi masuk ke server. Kemudian klien / pemanggil akan memberi tahu mereka nama apa yang mereka cari, dan itu akan mencari di konfigurasi Apache untuk bagaimana menangani nama itu.Jika nama tersebut tidak terdaftar sebagai ServerName / ServerAlias dalam konfigurasi apache, apache akan selalu memberi mereka VirtualHost pertama yang terdaftar. Atau, jika tidak ada VirtualHost sama sekali, itu akan memberikan konten yang sama tidak peduli apa nama host diberikan dalam permintaan.
ETA: Jadi, langkah demi langkah untuk koneksi normal:
http://www.example.com
browser Anda.www.example.com
.www.example.com
(itulahHost:
header dalam HTTP).www.example.com
. Salah satu dari yang berikut ini dapat terjadi:www.example.com
terdaftar sebagaiServerName
atauServerAlias
untukVirtualHost
- jika demikian, maka itu akan menggunakan konfigurasi untuk VirtualHost itu untuk mengirimkan konten.www.example.com
tidak terdaftar di dalamnya - jika demikian, Virtualhost pertama dalam daftar akan digunakan untuk mengirimkan konten.sumber
www.example.com
, DNS akan menyelesaikan alamat IP untuk nama itu, dan bagian host permintaan HTTP sebenarnya akan menjadi IP; setelah mencapai server, apache juga akan tahu bahwa permintaan itu dimintawww.example.com
dan jika adaServerName
atauServerAlias
arahan untuk nama domain itu, ia dapat melayani root dokumen?The server has VirtualHosts but www.example.com isn't listed in any of them - if so, the first Virtualhost in the list will be used to deliver the content.
. Saya menguji ini. Itu benar tetapi saya tidak yakin itu adalah Virtualhost pertama. Terimakasih untuk informasinya. +1Jika Anda tidak mendefinisikan ServerName, maka apache2 akan mencoba menerka dari / etc / hosts. ServerAlias adalah opsional. Kasus penggunaan yang paling umum adalah di mana
Terserah Anda (bukan pekerjaan apache2) untuk memastikan bahwa permintaan mencapai IP server web, misalnya, mendaftarkan domain dan mengatur catatan DNS. Cara yang sangat umum untuk melakukannya (untuk pengujian & pengembangan) tanpa catatan domain dan dns adalah mengatur file mesin / etc / hosts lokal Anda sehingga example.com menunjuk ke IP server Anda.
sumber
Saya sangat menyarankan untuk membaca dokumentasi resmi tentang topik ini: https://httpd.apache.org/docs/2.4/vhosts/name-based.html
dikatakan "Jika tidak ada ServerName atau ServerAlias yang cocok ditemukan dalam set host virtual yang berisi alamat IP dan kombinasi port yang paling spesifik, maka host virtual terdaftar pertama yang cocok dengan yang akan digunakan." . Jadi dalam kasus Anda jika Anda mengakses "foobar.com", entri VirtualHost pertama yang entah bagaimana cocok dengan IP 141.29.495.999 akan digunakan oleh httpd
Dokumen yang sama mengatakan "Banyak server ingin dapat diakses oleh lebih dari satu nama. Ini dimungkinkan dengan direktif ServerAlias,". Jadi, Anda dapat menganggap ServerAlias hanya sebagai entri ServerName tambahan.
sumber