Я пытаюсь настроить субдомен с использованием виртуальных хостов на основе имен в соответствии с форматом конфигурации в этот вопрос.
Насколько я понимаю, это:
Наконец, вы можете точно настроить конфигурацию виртуальных хостов, разместив другие директивы внутри контейнеров. Большинство директив можно поместить в эти контейнеры, и тогда они изменят конфигурацию только соответствующего виртуального хоста. Чтобы узнать, разрешена ли конкретная директива, проверьте Контекст директивы. Директивы конфигурации, установленные в контексте главного сервера (вне любого контейнера), будут использоваться только в том случае, если они не отменены настройками виртуального хоста.
должно означать, что задача перехода от одного хоста к поддомену 1 хост + 1 должна быть довольно простой. Однако, когда я добавляю директивы VirtualHost, я сталкиваюсь с проблемами.
Во-первых (и это довольно катастрофично) то, что домашняя страница для основного домена возвращает 403 (Запрещено). Может ли это быть причиной:
VirtualHost
директивы ближе к концу httpd.conf
, сразу после закомментированных инструкций для виртуальных хостовRedirect
s и Rewrite
s в файле, который включен после VirtualHost
s - они могут конфликтовать?VirtualHost
директивы, потому что я хочу, чтобы это было как можно проще. Не лучше ли переместить содержимое старого httpd.conf
в отдельный файл (например, main-domain.conf), Include
это в одном VirtualHost
и создайте отдельный файл conf для субдомена, в том числе и во втором VirtualHost
директива?Обновить
ОК, ошибка, точнее:
Индекс каталога запрещен правилом
Другие страницы работают нормально, значит, это какая-то проблема с перенаправлением с домашней страницы. Думаю, отчасти поэтому я спросил, известны ли конфликты между настройками VirtualHost и Redirect
с / Rewrite
с.
Если <Directory "/path/to/docroot">
блок, соответствующий DocumentRoot
в VirtualHost
блок быть до или после последнего (или неважно)?
Обновление 2
Хорошо, похоже, что не происходит следующее перенаправление:
RewriteRule ^/$ /path/to/something/else [PT]
что, как я предполагаю, происходит по одной из двух причин:
Текущая конфигурация даже не пытается обработать эту перезапись. Само правило находится в Include
d файл после VirtualHost
блоки.
Правило больше не соответствует, потому что VirtualHost
директива вызывает сбой сопоставления с образцом. Это кажется мне наиболее вероятным ...
Обновление 3
Кто-нибудь думает, что это может быть актуально?
Обратите внимание, что по умолчанию конфигурации перезаписи не наследуются. Это означает, что вам необходимо иметь директиву RewriteEngine on для каждого виртуального хоста, на котором вы хотите ее использовать.
Другими словами, означает ли это, что мне нужно:
<VirtualHost *:80>
RewriteEngine on
</VirtualHost>
для каждого VH, который должен обрабатывать материал Rewrite *, а не просто полагаться на RewriteEngine on
в глобально включенном файле?
Обновление 4
К сожалению, изменение, упомянутое в обновлении 3, вообще не устранило проблему.
Я всегда разбиваю свои vhosts на отдельные файлы каталогов. В httpd.conf есть строчка:
Include /etc/httpd/sites-enabled/*.conf
Затем создайте два каталога:
mkdir -p /etc/httpd/sites-{enabled,available}
Затем вы можете создать столько хостов, сколько вам нужно, по одному на файл в:
/etc/httpd/sites-available/site1.conf
/etc/httpd/sites-available/site2.conf
Теперь вы можете включать и выключать сайты с помощью символической ссылки в каталоге sites-enabled:
ln -s /etc/httpd/sites-available/sites2.conf /etc/httpd/sites-enabled/
Вы можете протестировать свою конфигурацию с помощью:
apachectl configtest
Что, по крайней мере, должно сказать вам, правильно ли вы синтаксически.
Андрей
Самая важная проблема здесь заключается в том, что когда у вас нет виртуальных хостов, базовая конфигурация действует как виртуальный хост по умолчанию.
Обычно (без добавления новых интерфейсов или портов), когда вы собираетесь добавить свой первый виртуальный хост, вам действительно нужно добавить два. Один для захвата трафика, который попал в базовую конфигурацию, и один для захвата нового трафика.
Если вы этого не сделаете, вы можете обнаружить, что виртуальный хост, который вы добавили для нового домена, обрабатывает весь трафик - и если работа еще не завершена, вы можете увидеть ошибки 403.
Итак, из конфигурации без виртуального хоста:
NameVirtualHost *:80
# This first vhost captures all traffic to port 80 if it doesn't match
# the ServerName/ServerAlias of another VH :80. <virtualhost *:80>. It acts
# like the base server config before you added vhosts
<virtualhost *:80>
ServerName example.com
# not much else, inherit from base
</virtualhost>
<virtualhost *:80>
ServerName other.example.com
...
</virtualhost>
И помните, что если вы добавите новый псевдоним или DocumentRoot, вам понадобится новый раздел, который будет выглядеть так же, как тот, который у вас есть для корневого каталога документов ваших базовых серверов.