На нашем сервере Apache работает на порту 9000 (поскольку IIS - 80), и у нас есть следующая конфигурация (vhosts.conf) для доступа к нашим сайтам:
NameVirtualHost *:9000
UseCanonicalName Off
<VirtualHost *:9000>
ServerAlias %1.ourserver
VirtualDocumentRoot D:/oursites/%1
VirtualScriptAlias D:/oursites/%1
</VirtualHost>
Итак, мы можем открыть браузер и получить доступ через http://someclient.ourserver:9000/
. Все идет нормально.
Сейчас мы устанавливаем новый сервер, на котором Apache будет работать на 80-м порту, но нам это нужно. один конкретный сайт, чтобы иметь VirtualDocumentRoot
на другой диск / каталог. Мы пробовали что-то вроде этого (безуспешно):
NameVirtualHost *:80
UseCanonicalName Off
<VirtualHost specificsite.ourdomain.com:80>
ServerAlias specificsite.ourdomain.com
VirtualDocumentRoot C:/specificsite
VirtualScriptAlias C:/specificsite
</VirtualHost>
<VirtualHost *:80>
ServerAlias %1.ourserver
VirtualDocumentRoot D:/oursites/%1
VirtualScriptAlias D:/oursites/%1
</VirtualHost>
Когда мы тестируем, результат таков, что доступ к http://specificsite.ourdomain.com/
в браузере Apache пытается «перенаправить» на D:/oursites/specificsite
, который не является правильным.
Доступ http://someclient.ourserver/
Перенаправления Apache правильно к D:/oursites/someclient
.
Так что мне не хватает? Похоже, я забыл небольшую деталь, из-за которой все запросы падают на второй VirtualHost.
Больше информации:
specificsite.ourdomain.com
заключается в том, что наши клиенты могут получить доступ к этому конкретному сайту, который размещен на нашем сервере.Заранее благодарю за любую помощь!
Две проблемы:
ServerAlias
не поддерживает те же переменные, что и VirtualDocumentRoot
- псевдоним этого vhost установлен буквально на %1.ourserver
.NameVirtualHost
директива, поэтому она не проверяется при поступлении запроса на эту комбинацию хост / порт. Он использует DNS для поиска адреса для привязки, поэтому тот факт, что он не отключил динамический виртуальный хост, означает, что ваш сервер, вероятно, находится за NAT.Попробуй это:
NameVirtualHost *:80
# Put this one's configuration first, so that it's the default.
<VirtualHost *:80>
# Add a ServerName directive so that it doesn't guess - it can be anything
ServerName dynamic.filler.name
ServerAlias *.ourserver
VirtualDocumentRoot D:/oursites/%1
VirtualScriptAlias D:/oursites/%1
</VirtualHost>
<VirtualHost *:80>
ServerName specificsite.ourdomain.com
VirtualDocumentRoot C:/specificsite
VirtualScriptAlias C:/specificsite
</VirtualHost>