Виртуальные хосты Apache и сервер по умолчанию не работают должным образом (обслуживают неправильный контент)

Я играл с этим в течение нескольких часов и пришел к выводу, что лучше всего спросить кого-нибудь!

У меня довольно стандартная установка apache (я добавил mod_security и mod_python), поэтому не трогал /etc/httpd/conf/httpd.conf

У меня есть несколько доменов, работающих как домены, и каждый со своим собственным файлом конфигурации. Все они работают, как и ожидалось, за исключением того факта, что любое нераспознанное имя хоста будет обслуживать контент с первого виртуального хоста (что, как я знаю, является ожидаемым поведением, поскольку обслуживается контент с первого виртуального хоста)

Я хотел бы настроить набор контента по умолчанию, который будет обслуживаться, если кто-то получит доступ к моему серверу через неизвестное имя хоста, но при этом первый сайт теперь также обслуживает этот контент по умолчанию, для которого я не могу найти причину.

Все файлы конфигурации для отдельных сайтов находятся в /etc/httpd/conf.d/sites (чтобы они не включались автоматически), а затем включаются через файл (/etc/httpd/conf.d/sites). .conf), который я создал — прежде чем пытаться настроить сервер по умолчанию, его содержимое таково:

Include conf.d/sites/*.conf

Я изменил его, чтобы попытаться заставить работать сервер по умолчанию:

<VirtualHost _default_:80>
        DocumentRoot /home/sites/DEFAULT
        <Directory "/home/sites/DEFAULT">
                AllowOverride None
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>
Include conf.d/sites/*.conf

Просто повторим проблему: когда активна вторая версия site.conf, первый VirtualHost также обслуживает этот контент; остальные в порядке. Все файлы конфигурации сайтов синтаксически правильны и не содержат опечаток в именах серверов.

(Для справки я включил файл конфигурации сайта-нарушителя, хранящийся в /etc/httpd/conf.d/sites/DOMAIN.clintonmontague.co.uk.conf)

<VirtualHost *:80>
        DocumentRoot /home/sites/clintonmontague.co.uk/www
        ServerName clintonmontague.co.uk
        LogLevel emerg
        CustomLog /home/sites/clintonmontague.co.uk/_logs/access_log "combined"
        <Directory "/home/sites/clintonmontague.co.uk/www">
                AllowOverride none
                allow from all
                Options +Indexes
        </Directory>
</VirtualHost>

Извините за слишком длинный вопрос!

Дополнительная информация: Apache 2.2, CentOS 5, MediaTemple (DV)


person iblamefish    schedule 06.03.2010    source источник


Ответы (2)


Если то, что вы говорите в своем ответе, верно, попробуйте это. Обратите внимание на строку ServerAlias, которая должна работать вместо кода PHP:

<VirtualHost *:80>
        DocumentRoot /home/sites/clintonmontague.co.uk/www
        ServerName clintonmontague.co.uk
        ServerAlias www.clintonmontague.co.uk 
        LogLevel emerg
        CustomLog /home/sites/clintonmontague.co.uk/_logs/access_log "combined"
        <Directory "/home/sites/clintonmontague.co.uk/www">
                AllowOverride none
                allow from all
                Options +Indexes
        </Directory>
</VirtualHost>
person Giacomo1968    schedule 26.01.2013
comment
Это правильный ответ, ServerAlias ​​специально разработан, чтобы позволить одному виртуальному хосту отвечать на запросы через несколько доменов. - person Flipmedia; 17.11.2014
comment
@Flipmedia - неправильный ответ. Вопрос заключается в том, как я могу указать, какой сайт обрабатывает запросы к неизвестным доменам. Я хотел бы настроить набор контента по умолчанию, который будет обслуживаться, если кто-то получит доступ к моему серверу через неизвестное имя хоста. - person iblamefish; 10.09.2016

Просто для справки - похоже, проблема была в том, что /etc/sysconfig/network сообщил о моем HOSTNAME как clintonmontague.co.uk (который оказался первым доменом в алфавитном порядке). Поэтому default включало это доменное имя, чтобы обслуживался контент по умолчанию.

Думал, что опубликую ответ на случай, если у кого-то возникнут подобные проблемы :)

Невозможно изменить это в MediaTemple (каждый раз, когда (dv) перезапускается, это значение сбрасывается)

Я исправил это, включив эту строку в index.php содержимого по умолчанию.

<?php
if ($_SERVER['SERVER_NAME'] == 'clintonmontague.co.uk' )
{
    header ('Location: http://www.clintonmontague.co.uk/');
}
?>
person iblamefish    schedule 06.03.2010
comment
Если вы каким-то образом снова споткнетесь об этом вопросе, @iblamefish, тогда ознакомьтесь с моим предложенным ответом ниже. - person Giacomo1968; 26.01.2013