Jika saya memiliki 3 domain, domain1.com, domain2.com, dan domain3.com, apakah mungkin membuat host virtual default ke domain yang tidak terdaftar? Misalnya, jika saya ingin:
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain1
ServerName domain1
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/domain2
ServerName domain2
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.2 204.255.176.199>
DocumentRoot /www/docs/everythingelse
ServerName *
ServerAlias host
</VirtualHost>
Jika Anda mendaftarkan domain dan mengarahkannya ke server saya, itu akan default ke semuanya lain yang menunjukkan sama dengan domain3. Apakah itu mungkin?
apache-2.2
virtualhost
SJaguar13
sumber
sumber
Saat menggunakan host virtual berbasis nama, konfigurasi host virtual pertama yang dimuat akan menjadi default (Sumber: Apache Wiki ). Misalnya, dengan konfigurasi di bawah ini, domain yang tidak cocok akan cocok dengan
domain-one.com
:Banyak server tidak memiliki file konfigurasi monolitik, tetapi memiliki beberapa file konfigurasi khusus host yang diatur sebagai berikut:
Dalam hal ini, untuk membuat beban konfigurasi host virtual tertentu terlebih dahulu, ganti nama symlink ke sesuatu yang akan menjadi yang pertama saat diurutkan, seperti
00-default
.Beberapa jawaban lain tidak sepenuhnya benar. Menurut Wiki Apache, pengaturan
ServerName
di host virtual tidak benar. Jika host tanpa sebuahServerName
tidak dimuat terlebih dahulu, Apache mungkin bahkan tidak pernah menggunakannya, karena host pertama yang dimuat akan menjadi default.Selain itu, walaupun
ServerAlias *
memang akan cocok dengan apa pun, itu juga dapat menimpa host virtual lain yang ditentukan kemudian. Mungkin pendekatan ini akan berhasil jika selalu menjadi host virtual terakhir yang didefinisikan (seperti dalam konfigurasi yang diberikan dalam pertanyaan), tetapi ini berarti menambahkan arahan baru dan mengubah urutan sortir alih-alih hanya mengubah urutan seperti di atas.sumber
httpd-vhosts.conf
Jangan tentukan nama server, dan itu menjadi vhost default Anda ..
Pastikan juga Anda belum menentukan DocumentRoot di file httpd.conf utama, karena itu akan lebih diutamakan daripada vhosts.
sumber
Urutan itu penting - pindahkan definisi vhost Anda untuk yang lainnya ke bagian atas daftar.
sumber
Gunakan host virtual _default_ dan letakkan dulu di httpd-vhosts.conf seperti yang ditentukan dalam http://httpd.apache.org/docs/2.2/vhosts/examples.html
"Menangkap setiap permintaan ke alamat IP dan port yang tidak ditentukan, yaitu, kombinasi alamat / port yang tidak digunakan untuk virtual host lain [...] Vhost default tidak pernah melayani permintaan yang dikirim ke alamat / port yang digunakan untuk vhost berbasis nama. Jika permintaan berisi header yang tidak diketahui atau tidak ada: header selalu dilayani dari vhost berbasis nama utama (vhost untuk alamat / port yang muncul pertama kali dalam file konfigurasi). "
Cuplikan dari httpd-vhosts.conf yang hidup tetapi dikaburkan yang terjadi untuk mengunci semua vhosts ke port 80:
Penjelasan mendalam tentang proses pencocokan vhost dapat ditemukan di sini: http://httpd.apache.org/docs/2.2/vhosts/details.html
sumber
_default_
hanya digunakan untuk IP yang tidak cocok , jadi ketika Anda memiliki vhost wildcarded (*: 80) itu tidak akan pernah digunakan.Wildcard menyertakan file konfigurasi situs Anda:
Atur file conf situs Anda sehingga mereka dimuat dalam urutan yang diharapkan. Contoh...
01-httpd.conf
02-site1-httpd.conf
03-site2-httpd.conf
dll ...
Apache akan membaca ini secara berurutan. Lalu buat satu yang akan selalu memuat terakhir untuk menangkap semua host virtual yang tak tertandingi dan mengembalikan 404 alih-alih memuat situs default.
99-catchall-httpd.conf
Pastikan untuk mengganti port dengan port apa pun yang didengarkan httpd Anda. Atau jika Anda mendengarkan httpd di antarmuka tertentu, Anda harus menambahkan catchall untuk setiap antarmuka, seperti:
Semoga ini membantu. Saya menggunakan metode ini untuk memuat situs dalam urutan yang saya tentukan dan mencegah host virtual yang tak tertandingi memuat situs yang tidak terduga secara tidak sengaja.
sumber
Solusi terbaik adalah mengubah nama file konfigurasi situs dimulai dengan "1" sehingga akan memuat pertama dan itu akan menjadi situs default Anda.
Apache2 menjadikan file vhost pertama yang dimuat sebagai halaman default.
sumber
000-default
host virtual untuk alasan ini.saat menggunakan
<VirtualHost *:port>
dan menentukan ServerName / ServerAlias untuk host yang Anda pedulikan, itulah yang perlu saya lakukan.Sedikit latar belakang dalam situasi saya:
Saya memiliki alamat IP dinamis dari ISP saya sehingga alamat IP saya terdaftar di perusahaan yang mendaftar alamat IP dinamis (noip.org dalam kasus saya). Salah satu "host" saya harus didaftarkan pada pendaftaran DNS saya sebagai myabc.example.com sebagai CNAME yang menunjuk ke host1.ddns.net. Tetapi host2.ddns.net dibiarkan apa adanya. Saya ingin myabc.example.com dan host1.ddns.net untuk pergi ke site1 dan host2.ddns.net untuk pergi ke situs 2 dan apa pun termasuk alamat IP saya untuk pergi ke default.
Pertama file conf membaca akan menjadi default, yaitu
000_def.conf
,001_site1.conf
,002_site2.conf
akan dibaca agar dengan000_def.conf
sebagai situs default. (catatan: dalam kasus saya, saya memiliki "file" ini di/etc/apache2/sites-enabled
mana sebenarnya adalah tautan dinamis ke file conf aktual/etc/apache2/sites-available
)Karena ServerName sedang digunakan di 001_site1.conf dan 002_site2.conf, itu juga harus diatur ke sesuatu di 000_def.conf.
sumber