В нашей локальной сети я установил несколько «поддельных» TLD на DNS-сервере с намерением использовать их для виртуального хостинга на основе имен Apache. Я хотел бы совместить это с массовым виртуальным хостингом (например, VirtualDocumentRoot) на сервере LAMP Ubuntu 10.04.
Однако я не могу заставить его выбрать правильный vhost!
Вот краткое изложение конфигурации Apache:
NameVirtualHost 10.10.0.205
<VirtualHost 10.10.0.205>
ServerName *.test
VirtualDocumentRoot /var/www/%-3.0.%-2/test/%1/
CustomLog /var/log/apache2/access.log vhost_combined
</VirtualHost>
<VirtualHost 10.10.0.205>
ServerName *.dev
VirtualDocumentRoot /var/www/%-3.0.%-2/dev/%1/
CustomLog /var/log/apache2/access.log vhost_combined
</VirtualHost>
Имя хоста, например www.domain.com.dev, правильно разрешается в 10.10.0.205, но всегда выбирает верхний виртуальный хост, а не нижний, который соответствует более точному.
У меня создалось впечатление, что Apache сначала попытается сопоставить ServerName, а затем по умолчанию выберет верхний виртуальный хост для данного IP. Что я делаю не так? Или это невозможно, и я должен использовать другой IP-адрес для каждого TLD?
apachectl -S выводит (обрезано):
10.10.0.205:* is a NameVirtualHost
default server *.test
port * namevhost *.test
port * namevhost *.dev
Использовать ServerAlias
, скорее, чем ServerName
в одиночестве:
ServerName somename.dev
ServerAlias *.dev
Если это может помочь, просто чтобы немного дополнить ответ Мо:
Подстановочные знаки в ServerAlias также работают с частичными доменными именами, такими как
ServerName somename.dev
ServerAlias *-mysite.dev
Недавно он спас мне жизнь ^^ (основной сайт с субдоменами для каждого субприложения, например admin-somename.dev
, bo-somename.dev
, api-somename.dev
...)