Apache tidak menghormati arahan ServerName untuk situs tertentu

9

Saya punya beberapa situs yang dikonfigurasi sebagai VirtualHost menggunakan Apache yang telah berfungsi dengan baik untuk sementara waktu. Saya baru-baru ini mengubah nama host server menjadi salah satu nama domain yang sedang dilayani, dan juga menambahkannya ke / etc / hosts yang menunjuk ke alamat IP eksternal server.

Sejak saya melakukan itu, mengakses domain dari laptop saya membawa saya ke default Apache "Berhasil!" halaman. Jika saya menghapus 000-default dari / etc / apache2 / sites-enabled /, ini akan menampilkan situs yang benar. Mencoba mengakses situs dengan 'www.' awalan membawa saya ke situs yang benar apakah 000-default di situs-diaktifkan.

Berdasarkan semua itu, saya menduga konfigurasi default melayani halaman default karena cara saya mengkonfigurasi nama host atau / etc / hosts (atau keduanya), tapi saya tidak tahu cara menonaktifkannya sementara membiarkan pengaturan itu apa adanya. Ada saran!

Sunting - Konfigurasi VirtualHost saya saat ini terlihat seperti ini:

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin [email protected]

    DocumentRoot /srv/www/domain

    ErrorLog /srv/www/domain/logs/error.log
    CustomLog /srv/www/domain/logs/access.log combined
</VirtualHost>

Untuk meringkas: Saya memiliki beberapa VirtualHost diatur, dan ini adalah satu-satunya yang tidak berfungsi dengan baik. Saya dapat mengakses http://www.domain.com , tapi http://domain.com membawa saya ke default Apache "Berhasil!" halaman. Jika saya menonaktifkan konfigurasi 000-default itu menunjukkan halaman yang tepat. Ini hanya mulai terjadi setelah saya menetapkan nama host server ke domain.com dan menambahkan baris ke / etc / hosts menunjuk domain.com ke alamat IP eksternal server. Saya ingin membiarkan mereka seperti itu jika memungkinkan.

Sunting: Saya berlari apache2ctl -Ssejak /usr/sbin/apache2 -Smemberi saya "apache2: nama pengguna yang buruk $ {APACHE_RUN_USER}". Inilah hasilnya:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/000-default:1)
         port 80 namevhost other.com (/etc/apache2/sites-enabled/other:1)
         port 80 namevhost another.com (/etc/apache2/sites-enabled/another:1)
         port 80 namevhost domain.com (/etc/apache2/sites-enabled/domain:1)
Syntax OK
John Debs
sumber
apakah domain.com digunakan pada file httpd.conf utama sebagai ServerName? atau apache2ctl.conf Anda tampaknya menggunakan ubuntu sehingga mungkin berbeda nama.
Prix

Jawaban:

12

Hilang pertanyaan ini tempo hari.

Ketika Anda memiliki wadah <VirtualHost> tanpa komponen ServerName, itu akan menggunakan nama host default. Karena 000-default mungkin tidak memiliki komponen ServerName, dan merupakan yang pertama menurut abjad yang akan dimasukkan, itulah sebabnya ia menjawab untuk hostname.com dan tidak mengizinkan nama host yang Anda nyatakan secara eksplisit berfungsi.

karmawhore
sumber
Begitu ya, ada cara untuk memperbaikinya? Saya ingin konfigurasi default untuk menangani domain tidak ditangani, tetapi saya tidak ingin itu menangani domain tertentu.
John Debs
berikan domain selain dari yang digunakan dalam konfigurasi, atau ubah nama menjadi zzz-default sehingga disebut terakhir.
karmawhore
Oke, saya pikir saya mengerti semuanya sekarang. Saya mencoba zzz-default tetapi itu bukan perilaku yang tepat yang saya inginkan. Pengaturan ServerName example.comdi konfigurasi default berfungsi dengan baik. Terima kasih!
John Debs
4

Apakah Anda memiliki direktif NameVirtualHost *: 80 di suatu tempat?

Mencoba:

/usr/sbin/apache2 -S

Itu akan memberi tahu Anda bagaimana apache mem-parsing file konfigurasi. Apakah Anda memiliki konfigurasi yang memiliki IP aktual atau semuanya memiliki *? Apakah Anda kehilangan: 80? Apache tidak suka mencampurkannya.

Apakah Anda memiliki ServerName domain.com atau ServerAlias ​​domain.com secara default?

karmawhore
sumber
Yup, saya mendapatkannya di /etc/apache2/posts.conf saya. Saya akan menambahkan ringkasan untuk pertanyaan yang diharapkan membuatnya lebih jelas.
John Debs
Konfigurasi 000-default saya tidak tersentuh, tidak memiliki arahan ServerName atau ServerAlias.
John Debs
NameVirtualHost sudah ditinggalkan.
Sam
0

Ini berhasil:

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
</VirtualHost>

ketika saya salah ketik, TIDAK berfungsi (direktif ServerName dua kali):

<VirtualHost *:80>
    DocumentRoot /var/www/www.mydomain.com
    ServerName mydomain.com
    ServerName www.mydomain.com
</VirtualHost>

Ketika saya memiliki direktif ServerName dua kali, itu terus menyelesaikan ke situs pertama yang terdaftar (tidak ditampilkan di sini).

semoga ini membantu seseorang ...

Sam
sumber
0

Saya memiliki masalah yang sama, dan memperbaikinya dengan secara eksplisit menetapkan ServerName di file httpd.conf utama, daripada membiarkan apache secara otomatis mencari tahu itu. Saya berasumsi bahwa apache yang diputuskan sama dengan vhost saya (didefinisikan kemudian), jadi yang default "menang", mengesampingkan pengaturan vhost.

Saya hanya mengatur httpd.conf ServerName ke nama host yang dimiliki mesin, saya tidak akan pernah melayani halaman web.

sstteevvee
sumber