perbedaan antara _default _: * dan *: * dalam Konteks VirtualHost

35

Saya ingin tahu perbedaan antara " default : *" dan "*: *" dalam Konteks VirtualHost.

<VirtualHost _default_:*>
  #...
  ServerName host.example.com
  #...
</VirtualHost>

<VirtualHost *:*>
  #...
  ServerName host.example.com
  #...
</VirtualHost>

Saya tidak tahu perbedaan dan penggunaannya.

Terima kasih

Luigi Giuseppe
sumber

Jawaban:

40

Solusi ada di dokumentasi Apache 2.2 di direktif Virtualhost :

Sintaks: ... (...) Addr dapat berupa:

  • Alamat IP dari host virtual;
  • Nama domain yang sepenuhnya memenuhi syarat untuk alamat IP dari host virtual (tidak disarankan);
  • Karakter * , yang hanya digunakan dalam kombinasi dengan NameVirtualHost * untuk mencocokkan semua alamat IP; atau
  • String _default_ , yang hanya digunakan dengan hosting virtual IP untuk menangkap alamat IP yang tidak cocok.

Ada dua cara penanganan Virtualhost, Virtualhosting berbasis nama dan Virtualhosting berbasis IP.

Dengan virtualhosts berbasis bernama Anda memiliki daftar virtualhosts, masing-masing mengelola satu atau beberapa nama domain, dan masing-masing terkait dengan pasangan listening IP:port. *adalah nilai khusus yang berarti semua IP pada host ini . VirtualHost default adalah yang pertama dideklarasikan di daftar ini untuk setiap alamat mendengarkan yang diberikan.

Dengan VirtualHost berbasis IP, ServerNamearahan dari VirtualHost tidak digunakan, informasi penting adalah IP yang mendengarkan (dan port), dan VirtualHost default adalah yang pertama yang cocok dengan IP yang menangani permintaan yang masuk ..

Jadi dengan konfigurasi virtualhosting berbasis bernama:

  • <Virtualhost *:80> with ServerName foo.com berarti "pada semua IP yang dikelola pada host ini", "pada port 80", "jika header host permintaan adalah foo.com" Saya akan menggunakan virtualhost ini
  • <Virtualhost *:*> with Servername foo.com berarti "pada semua IP yang dikelola pada host ini", "pada semua port", "jika header host permintaan adalah foo.com" Saya akan menggunakan virtualhost ini
  • <Virtualhost 10.0.0.2:*> with Servername foo.com berarti "untuk permintaan yang masuk dari antarmuka jaringan saya 10.0.0.2", "pada semua port", "jika header host permintaan adalah foo.com" Saya akan menggunakan virtualhost ini
  • <Virtualhost _default_:*> with Servername foo.com : tidak boleh digunakan dengan virtualhosting berbasis nama

Dan pada Virtualhosting berbasis IP:

  • <Virtualhost 10.0.0.2:*> berarti "Saya akan menggunakan virtualhost ini untuk permintaan yang datang pada antarmuka 10.0.0.2 saya"
  • <Virtualhost _default_:443> berarti "Saya akan menggunakan virtualhost ini untuk semua antarmuka jaringan lain di host saya untuk permintaan yang datang pada port 443"
  • <Virtualhost _default_:*> berarti "Saya akan menggunakan virtualhost ini untuk semua antarmuka jaringan lain di host saya, jika tidak cocok dengan aturan sebelumnya, dan jika header host permintaan tidak cocok dengan virtualhost berbasis bernama"

Jadi ini semua tentang mendefinisikan catch-all Virtualhost. Dokumentasi menambahkan:

Saat menggunakan hosting virtual berbasis IP, nama khusus _default_dapat ditentukan dalam hal ini host virtual ini akan cocok dengan alamat IP apa pun yang tidak secara eksplisit tercantum dalam host virtual lain. Dengan tidak adanya _default_host virtual, konfigurasi server "utama", yang terdiri dari semua definisi di luar bagian VirtualHost, digunakan ketika tidak ada kecocokan IP yang terjadi. (Tetapi perhatikan bahwa alamat IP apa pun yang cocok dengan direktif NameVirtualHost tidak akan menggunakan konfigurasi server "utama" maupun _default_host virtual. Lihat dokumentasi hosting virtual berbasis nama untuk perincian lebih lanjut.)

Jadi setelah semua hal ini menjadi sangat "jelas" bahwa pencampuran virtualhosting berbasis IP dan nama bisa menjadi berantakan. Dengan Apache 2.2 virtualhosting berbasis nama hanya digunakan jika NameVirtualhost <something>digunakan.

Tetapi dengan versi tesis Apache 2.4 baru hal-hal yang benar-benar lebih mudah dipahami, tidak ada NameVirtualhostpernyataan. Arahan NameVirtualHost tidak lagi memiliki efek apa pun, selain memancarkan peringatan. Setiap kombinasi alamat / port yang muncul di beberapa host virtual diperlakukan secara implisit sebagai host virtual berbasis nama . Tidak ada yang lebih rumit, bahkan dokumentasinya pun kini lebih sederhana:

  • Karakter *, yang bertindak sebagai wildcard dan cocok dengan alamat IP apa pun.
  • String _default_, yang merupakan alias untuk *

Jadi dengan apache 2.4 jawabannya adalah, itu hal yang sama .

regilero
sumber