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

Настройте массовые виртуальные хосты Apache для разных каталогов

На нашем сервере 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.

Больше информации:

Заранее благодарю за любую помощь!

Две проблемы:

  1. ServerAlias не поддерживает те же переменные, что и VirtualDocumentRoot - псевдоним этого vhost установлен буквально на %1.ourserver.
  2. Ваше объявление нового vhost не соответствует 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>