Мы запускаем 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
). Чтобы добиться желаемого поведения, я думаю, вам нужно сделать следующее:
somesite.com
виртуальный хост, чтобы его ServerAlias
содержит каждое имя, которое вы не хотите использовать для виртуального хоста по умолчанию.Надеюсь, у кого-то есть решение, которое ближе к достижению желаемого конечного результата; это было какое-то время, и мне было бы интересно поучиться на этом.