Я только что установил Apache 2.2 и пытаюсь разместить два домена на одной конфигурации сервера. Сначала я создал виртуальный хост (a.com), и отладил мою конфигурацию, чтобы она работала. Когда я пытался добавить виртуальный хост b.com, и попытался получить к нему доступ, все, что я получил, - это правильная страница для a.com. Оба виртуальных хоста указывают на один и тот же статический IP-адрес. Сервер работает под управлением CentOS на VPS.
/usr/local/apache2/conf/httpd.conf
имеет базовую конфигурацию и частично приведена ниже, но у меня httpd.conf
Include
второй файл, clients.conf
это в свою очередь Includes
конфигурация для каждого сайта, которая находится в домашних каталогах различных веб-сайтов. (Каждый сайт имеет свою учетную запись с каталогами web
, scripts
, data
, и config
.)
httpd.conf:
Listen 80
NameVirtualHost [ip]
# [...]
Include /usr/local/apache2/conf/clients.conf
client.conf:
Include /home/[a]/conf/apache/vhost.conf
Include /home/[b]/conf/apache/vhost.conf
/home/[a]/conf/apache/vhost.conf
<VirtualHost [ip]>
ServerName www.[a].com
ServerAlias [a].com
ServerAdmin [me]@[a].com
DocumentRoot /home/[a]/web/home
ErrorDocument 404 "http://www.[a].com/error/?404"
<Directory /home/[a]/web/home>
Options -Indexes FollowSymLinks
# Don't allow any .htaccess files
AllowOverride None
# Allow everyone to access
Order allow,deny
</Directory>
</VirtualHost>
/home/[b]/config/apache/vhost.conf
<VirtualHost [ip]>
ServerName www.[b].com
ServerAlias [b].com
ServerAdmin admin@[b].com
DocumentRoot /home/[b]/web/home
ErrorDocument 404 "http://www.[b].com/error/?/404/"
<Directory /home/[b]/web/home>
Options -Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost [ip]>
ServerName beta.[b].com
DocumentRoot /home/[b]/web/home
<Directory /home/[b]/web/home>
Options -Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
(Извините за весь код, но я не знал, сколько нужно.)
Может ли кто-нибудь увидеть проблему в моем коде? Я думаю, что он выглядит почти идентично Пример VirtualHost (первый), за исключением того, что я расширил «Другие директивы здесь» и использовал полные IP-адреса, а не *
подстановочный знак, который описан в «Примечание:» под примером.
редактировать:
Как подсказал комментарий, я попробовал apachectl -S
, что дало следующий результат:
# /usr/local/apache2/bin/apachectl -S
VirtualHost configuration:
[ip] is a NameVirtualHost
default server www.[a].com (/home/[a]/conf/apache/vhost.conf:5)
port 80 namevhost www.[a].com (/home/[a]/conf/apache/vhost.conf:5)
Syntax OK
Не должен [b].com
быть здесь?
Я выяснил решение моей проблемы, пытаясь предложить предложение BMDan. Я открыл clients.conf
, который должен был быть (и был сохранен как) включая файлы из клиентского a
и b
. Вместо этого все, что у него было, это включение для a
. Я понятия не имею, почему он не содержал нужных данных, но моя установка Apache теперь работает правильно.
Я благодарю всех, кто помог мне с этой проблемой, и прошу прощения, если проблема была вызвана ошибкой, которую я сделал.
Который [b].com
не появляется - это признак того, что [b]
либо не загружается, либо не распознается (и обычно последнее). Наиболее частой причиной этого является несоответствие IP-адреса, указанного как часть вашего NameVirtualHost, и IP-адреса, указанного в <VirtualHost>
; это одна из причин, почему использование *:80
вообще желательно.
В любом случае, есть простой тест, чтобы увидеть, загружается ли файл: просто включите недопустимую команду конфигурации в [b].com
конфигурационного файла и посмотрите, httpd -t
(или service httpd configtest
, поскольку вы используете CentOS) сообщает об ошибке.