Назад | Перейти на главную страницу

VirtualHosts с Apache не уважает ServerName

Это всегда меня беспокоило, и у меня никогда не было времени выяснить, почему Apache делает это, я всегда прибегал к плагину mod_vhost, чтобы обойти эту проблему.

В принципе, у меня есть 2 хоста с поддержкой сайтов (сервер Ubuntu), их содержимое:

<VirtualHost *>
DocumentRoot "/var/www/vhosta.domain.com/"
ServerName vhosta.domain.com
<Directory "/var/www/vhosta.domain.com/">
allow from all
Options +Indexes
</Directory>
</VirtualHost>

И

<VirtualHost *>
DocumentRoot "/var/www/vhostb.domain.com/"
ServerName vhostb.domain.com
<Directory "/var/www/vhostb.domain.com/">
allow from all
Options +Indexes
</Directory>
</VirtualHost>

Теперь логически эти 2 будут доступны по отдельности, однако кажется, что все запросы к моему серверу, независимо от того, какие vhosts я определяю поверх этого, будут направляться на vhosta.domain.com.

Я упускаю что-то невероятно очевидное? Я действительно не понимаю, зачем он это делает ...

Спасибо

Перед определениями вашего виртуального хоста вам нужно что-то вроде:

NameVirtualHost *:80

Вы делаете виртуальные хосты на основе имен. Смотрите документацию здесь:

http://httpd.apache.org/docs/2.2/mod/core.html#namevirtualhost

Вам не хватает NameVirtualhost; тем не мение:

  • НЕ используйте VirtualHost *; использовать VirtualHost *:80 вместо.

Вот правильный способ:

NameVirtualHost *:80

<VirtualHost *:80>
  Servername vhosta
</VirtualHost>

<VirtualHost *:80>
  Servername vhostb
</VirtualHost>