Несколько виртуальных хостов в Centos 7 не работают вместе

Несколько виртуальных хостов в Centos 7 не работают вместе

Информация о моем сервере

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получает все запросы.

Поведение описано в документации с очень похожей конфигурацией:

Запуск нескольких веб-сайтов с именами на одном IP-адресе (httpd.apache.org/docs/2.4/vhosts/examples.html)

# 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>.


Решение:

  1. Имя ServerNameдолжно быть без http://префикса и без завершающего слеша, т.е.

    ServerName biz.example.com
    

    и

    ServerName pin.example.com
    
  2. ServerAliasможет быть удален, так как имеет то же значение, что иServerName

  3. <Directory>и </Directory>должно начинаться с заглавной буквы

  4. Старый синтаксис управления доступом Apache 2.2 следует изменить на новый Requireсинтаксис Apache 2.4.

    Order Deny,Allow
    Allow from 127.0.0.1
    

    следует заменить на

    Require local
    

    Видеть


Связанный контент