Назад | Перейти на главную страницу

Страница настройки по умолчанию для виртуальных хостов Apache

Мы запускаем Apache на сервере с несколькими VirtualHost записи. Всякий раз, когда кто-то обращается к серверу по его IP-адресу (http://198.147.xx.xx), один из сайтов, VirtualHost подходит. Это нежелательно. Мы бы предпочли, чтобы при прямом доступе к IP-адресу появлялась пустая страница. Я не уверен, является ли выбранный сайт первым в списке записей виртуального хоста или что-то в этом роде.

Мы хотим настроить пустую страницу по умолчанию, если кто-то обращается к серверу по IP. Я думал, что просто настраивая другой VirtualHost запись для IP-адреса сделает это, и казалось, что это так, но теперь доступ к любому другому VirtualHost сайты ведут к той же пустой странице по умолчанию. Вот пример нашего конфига:

<VirtualHost *:80>
    DocumentRoot /vhosts/somesite.com/public
    ServerName somesite.com
    <Directory "/vhosts/somesite.com/public">
        allow from all
        Options +Indexes
        AllowOverride All
    </Directory>
    ServerAlias www.somesite.com
</VirtualHost>

<VirtualHost 198.147.XX.XX:80>
    DocumentRoot /vhosts/default/public
    <Directory /vhosts/default/public>
        allow from all
        Options +Indexes
    </Directory>
</VirtualHost>

Что мы здесь делаем не так? Есть ли лучший способ настроить целевую страницу по умолчанию для всех, кто обращается к серверу через IP-адрес?

Если я правильно помню, поведение виртуальных хостов работает так:

  • httpd ищет vhost с наиболее точными квалификаторами. (либо IP-адрес, либо заголовок хоста, если NameVirtualHost было объявлено)
  • В отсутствие конкретной записи первый виртуальный хост, который будет определен, будет использоваться. Это называется виртуальный хост по умолчанию и что обычно обслуживается, когда запрос сделан без Host заголовок. (т.е. по IP-адресу)

Проблема, с которой вы сейчас сталкиваетесь, заключается в том, что ваш виртуальный хост на основе IP более конкретен, чем ваш универсальный виртуальный хост по умолчанию (по крайней мере, когда Host заголовок не соответствует ServerName или ServerAlias). Чтобы добиться желаемого поведения, я думаю, вам нужно сделать следующее:

  • Создайте виртуальный хост по умолчанию *: 80 с пустой страницей.
  • Настройте свой somesite.com виртуальный хост, чтобы его ServerAlias содержит каждое имя, которое вы не хотите использовать для виртуального хоста по умолчанию.

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