
Информация о моем сервере
Server version: Apache/2.4.6 (CentOS)
Server built: Nov 19 2015 21:43:13
Я пытаюсь настроить виртуальный хост для 2 разных сайтов: biz.example.com и pin.example.com, которые размещены на одном сервере. В 'var/www/html/' находятся 2 разные папки с именами 'biz' и 'pin' с соответствующими файлами проектов для вышеупомянутых 2 веб-сайтов. Я пытаюсь настроить его следующим образом.
В /etc/hosts ниже конфигурации
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
xxx.xxx.xxx.xxx biz.example.com
xxx.xxx.xxx.xxx pin.example.com
xxx.xxx.xxx.xxx заменяется на IP-адрес сервера.
В /etc/httpd/conf/httpd.conf
IncludeOptional sites-enabled/*.conf
Теперь в /etc/httpd/sites-available есть файлы biz.conf и pin.conf. У меня также есть папка sites-enabled в /etc/httpd, в которой есть 2 файла, которые указывают на biz.conf и pin.conf папки sites-available, используя следующую команду
ln -s /etc/httpd/sites-available/biz.conf /etc/httpd/sites-enabled/biz.conf
ln -s /etc/httpd/sites-available/pin.conf /etc/httpd/sites-enabled/pin.conf
biz.conf имеет следующее
<VirtualHost *:80>
ServerName http://biz.example.com/
ServerAlias http://biz.example.com/
DocumentRoot "/var/www/html/biz"
<directory "/var/www/html/biz">
Options Indexes FollowSymLinks
AllowOverride all
Order Deny,Allow
Allow from 127.0.0.1
</directory>
</VirtualHost>
А конфигурация в файле pin.conf указана как
<VirtualHost *:80>
ServerName http://pin.example.com/
ServerAlias http://pin.example.com/
DocumentRoot "/var/www/html/pin"
<directory "/var/www/html/pin">
Options Indexes FollowSymLinks
AllowOverride all
Order Deny,Allow
Allow from 127.0.0.1
</directory>
</VirtualHost>
При такой настройке, если я попытаюсь получить доступhttp://biz.example.com/, загружается правильный веб-сайт (бизнес-сайт). Но если я попытаюсь получить доступhttp://pin.example.com/, то также загружается сайт biz вместо сайта pin. Несколько конфигураций не работают вместе.
Я также попытался объединить виртуальную конфигурацию biz.conf и pin.conf в один файл biz.conf, но это не сработало.
решение1
Отвечать:
1) Необходимо удалить завершающий слеш из ServerName и ServerAlias.
2) Здесь мы можем удалить ServerAlias, а также ServerName и ServerAlias, оба они одинаковы.
решение2
Удалите двойные кавычки из вашего пути.
DocumentRoot /var/www/html/pin
<directory /var/www/html/pin>
решение3
При такой настройке, если я попытаюсь получить доступhttp://biz.example.com/, загружается правильный веб-сайт (бизнес-сайт). Но если я попытаюсь получить доступhttp://pin.example.com/, то вместо закрепленного сайта также загружается бизнес-сайт.
Это связано с тем, что обе ServerName
директивы ServerAlias
не совпадают (неправильный синтаксис), и в этом случае первая определенная директива VirtualHost
получает все запросы.
Поведение описано в документации с очень похожей конфигурацией:
# Ensure that Apache listens on port 80 Listen 80 <VirtualHost *:80> DocumentRoot "/www/example1" ServerName www.example.com # Other directives here </VirtualHost> <VirtualHost *:80> DocumentRoot "/www/example2" ServerName www.example.org # Other directives here </VirtualHost>
Звездочки соответствуют всем адресам, поэтому основной сервер не обслуживает запросы. В связи с тем, что виртуальный хост с
ServerName www.example.com
первым в файле конфигурации, он имеет наивысший приоритет и может рассматриваться какпо умолчаниюилиначальныйserver. Это означает, что если получен запрос, не соответствующий ни одной из указанныхServerName
директив, он будет обслужен этим первым<VirtualHost>
.
Решение:
Имя
ServerName
должно быть безhttp://
префикса и без завершающего слеша, т.е.ServerName biz.example.com
и
ServerName pin.example.com
ServerAlias
может быть удален, так как имеет то же значение, что иServerName
<Directory>
и</Directory>
должно начинаться с заглавной буквыСтарый синтаксис управления доступом Apache 2.2 следует изменить на новый
Require
синтаксис Apache 2.4.Order Deny,Allow Allow from 127.0.0.1
следует заменить на
Require local
Видеть