Несколько виртуальных хостов Apache2 указывают на один и тот же веб-сайт

#apache #http #configuration #apache2

#apache #http #конфигурация #apache2

Вопрос:

Я использую Apache2 в Ubuntu 10, и у меня есть файлы конфигурации моего сайта, расположенные в числовом формате и по порядку. Мой сервер по умолчанию psychedeli.ca , но я также запускаю другой сайт с того же окна на mahoganytales.com. В настоящее время оба этих домена указывают на один и тот же сайт (тот, для psychedeli.ca). Объявление NameVirtualHost *:80 находится в моем файле ports.conf, поэтому я почти уверен, что моя глобальная конфигурация сервера проверяется. Как я могу это исправить?

Вот мои файлы виртуальных хостингов:

001-psycho

 <VirtualHost *:80>
    DocumentRoot /var/apps/psycho/public
    ServerName psychedeli.ca
</VirtualHost>
  

002-mahogany

 <VirtualHost *:80>
    DocumentRoot /var/apps/mahogany/public
    ServerName mahoganytales.com
</VirtualHost>
  

Ответ №1:

попробуйте создать новый файл conf по адресу /etc/apache2/conf.d , например, vhosts.conf

с этим содержимым на нем:

 NameVirtualHost *
  

Ответ №2:

Похоже, что действует конфигурация по умолчанию, а не записи вашего хоста. Ниже приведена процедура, которая работает в Ubuntu Apache2.

Первый,

  • создайте виртуальный хостинг в /etc/apache2/sites-available/somesite ,
  • затем a2ensite somesite , чтобы заставить его работать.
  • Наконец, /etc/init.d/apache2 restart перезапустить apache.

Если вы считаете, что выполнили вышеуказанные шаги, то не могли бы вы подтвердить, что у вас есть файлы hosts в /etc/apache2/sites-enabled/ ?

Ответ №3:

У каждого доменного имени должен быть свой собственный уникальный ip-адрес, именно так можно находить разные сайты.

Используя *:80 в директиве виртуального хоста, вы даете указание Apache прослушивать все IP-адреса, порт 80 и отправлять его в этот каталог. Со своим вторым виртуальным хостингом вы делаете то же самое (у всех IP-порт 80, и отправляете его туда). Ну, поскольку вы даете ему два конфликтующих оператора, он принимает первое совпадение и использует его.

Если вы хотите обслуживать несколько веб-сайтов, каждый должен отвечать на свой собственный уникальный IP-адрес, т.Е.:

 site aaa.com - 145.25.82.110
site bbb.com - 145.25.82.111
  

Оттуда каждая запись vhosts будет прослушивать свой собственный IP-адрес и порт для каждого сайта. В случае операционной системы виртуальный хост необходимо изменить на (используя пример IP-адресов):

<Виртуальный хостинг 145.25.82.110:80>
 DocumentRoot /var/apps / psycho/public
 Имя_сервера psychedeli.ca
</VirtualHost>

<Виртуальный хостинг 145.25.82.111:80>
 DocumentRoot /var/apps /mahogany/public
 Имя_сервера mahoganytales.com
</VirtualHost>

Это предписывает серверу прослушивать статический IP 1 порт 80 (как определено в именованных файлах конфигурации.conf и связанной с ними привязки) и отправлять его в первый базовый каталог сайта, а также любые вызовы на втором статическом IP-порту 80 и отправлять его во второй базовый каталог сайта.

Что касается настройки bind / named, это выходит за рамки этого вопроса…

Комментарии:

1. Вы можете обслуживать несколько имен хостов с одного IP-адреса с помощью <Virtualhost *:80> и NameVirtualHost * — вам нужно только создать отдельные определения виртуальных хостов с разными значениями ServerName или использовать один виртуальный хост с ServerAlias , перечисляющими альтернативные доменные имена

2. Просто хотел добавить: DNS-серверы разрешают IP-адреса из имен хостов, и у них может быть один и тот же IP-адрес, указанный для нескольких имен хостов. Но остальная часть объяснения (что apache обращается к первому соответствующему виртуальному хосту и игнорирует второй) Я считаю, что это абсолютно точно. Однако для устранения неоднозначности запроса должно присутствовать что -то, и в этом случае доменное имя, предоставленное конечным пользователем / клиентом, выполняет это и работает со значениями servername / serveralias, предоставленными конфигурацией сервера.