Bagaimana cara kerja ServerName dan ServerAlias?

62

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.comdan 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.999tetapi kemudian saya punya ServerName = 141.29.495.999dan ServerAliaskosong, apakah itu berarti bahwa meskipun foobar.com diselesaikan dengan IP yang tepat, karena tidak ada referensi untuk menerima foobar.com di ServerNameatau ServerAlias?

Atau sesuatu. Astaga, aku bingung.

njp
sumber
1
Anda lupa beberapa kata di paragraf ke-2 terakhir. :-)
ThatGraemeGuy

Jawaban:

105

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.commereka 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 ServerNamedan ServerAliaslebih 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:

  1. Anda mengetik di http://www.example.combrowser Anda.
  2. Komputer Anda menanyakan resolver DNS-nya ke alamat IP mana yang harus digunakan ketika ingin diajak bicara www.example.com.
  3. Komputer Anda terhubung ke alamat IP itu, dan mengatakan bahwa ia ingin diajak bicara www.example.com(itulah Host:header dalam HTTP).
  4. Server web melihat konfigurasinya untuk mencari tahu apa yang harus dilakukan dengan permintaan konten www.example.com. Salah satu dari yang berikut ini dapat terjadi:
    • www.example.comterdaftar sebagai ServerNameatau ServerAliasuntuk VirtualHost- jika demikian, maka itu akan menggunakan konfigurasi untuk VirtualHost itu untuk mengirimkan konten.
    • Server tidak memiliki VirtualHosts sama sekali - jika demikian, maka ia akan menggunakan konfigurasi di httpd.conf untuk mengirimkan konten.
    • Server memiliki VirtualHosts tetapi www.example.comtidak terdaftar di dalamnya - jika demikian, Virtualhost pertama dalam daftar akan digunakan untuk mengirimkan konten.
Jenny D kata Reinstate Monica
sumber
Jadi, jika bagian host dari permintaan HTTP adalah 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 diminta www.example.comdan jika ada ServerNameatau ServerAliasarahan untuk nama domain itu, ia dapat melayani root dokumen?
njp
Tidak - bagian permintaan HTTP masih merupakan nama host. Saya akan menjelaskan sedikit lagi.
Jenny D mengatakan Reinstate Monica
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. +1
SMMousavi
19

Jika Anda tidak mendefinisikan ServerName, maka apache2 akan mencoba menerka dari / etc / hosts. ServerAlias ​​adalah opsional. Kasus penggunaan yang paling umum adalah di mana

ServerName example.com
ServerAlias www.example.com

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.

192.168.0.12 example.com
192.168.0.12 www.example.com
blau
sumber
0

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.

Pierluigi Vernetto
sumber