2013-05-13 2 views
0

ОС: CentOS 6.3 FinalDocumentRoot установлен в docRoot виртуального хоста?

Я установил MySQL и apache2 (HTTPd) пакеты и изменил конфиг в /etc/httpd/conf/httpd.conf, как показано ниже:

<VirtualHost *:80> 
    DocumentRoot /var/www/html/wordpress/ 
    ServerName www.asterix.int 
</VirtualHost> 
<VirtualHost *:80> 
    DocumentRoot /var/www/html/staticSite/ 
    ServerName www.meins.lan 
    ServerAlias www.deins.lan 
    ServerAlias www.obelix.int 
</VirtualHost> 
<VirtualHost *:80> 
    DocumentRoot /var/www/html/joomla/ 
    ServerName www.example.com 
    ServerAlias www2.example.com 
    ServerAlias www3.example.com 
</VirtualHost> 

Все ServerName и ServerAlias ​​работают нормально, и я могу получить доступ к 3 страницам.

Но когда я пытаюсь получить доступ к странице через IP-адрес сервера, произойдет что-то странное (по крайней мере, для меня). apache2 возвращает мне индексную страницу первого определенного virtualHost (в этом примере wordpress). Я пробовал это со всеми 3 virtualHosts и получал те же результаты.

Это нормальное поведение или то, что я делаю ложным?

Если это нормальное поведение: могу ли я установить DocumentRoot исключительно для всех запросов на ip?

Thx!

ответ

0

Это предполагаемое поведение. Если вы используете IP (скажем, http://123.123.123.123/), Apache будет использовать 123.123.123.123 как HTTP-имя хоста. Поскольку VirtualHost отсутствует с ServerName или ServerAlias123.123.123.123, используется первый VirtualHost.

Так что, если вы хотите VirtualHost, который прослушивает только для http://123.123.123.123/ вы можете просто создать VirtualHost с:

<VirtualHost *:80> 
    DocumentRoot /var/www/html/my-ip-site/ 
    ServerName 123.123.123.123 
</VirtualHost> 
+0

Я только что нашел запись ДИЗКНА о том, что (httpd.apache.org/docs/2.2/en/vhosts/name-based. html/- Главный хост уходит) и добавил запись, подобную вашей, в первую очередь. DocumentRoot этого VirtualHost имеет то же значение, что и глобальный DocumentRoot, и теперь работает над ip-интерфейсом сервера. Ты. – SaintCore

0

Это нормальное поведение. Вы используете vhost-метод, называемый виртуальными хостами на основе имен. Как вы можете себе представить, это означает, что «маршрутизация» apache выполняется только по имени хоста в HTTP-запросе в соответствии с директивами ServerName и ServerAlias ​​в конфиге.

Как запрос на IP-адрес вашего сервера - например, 1.2.3.4 - не может быть маршрутизирован в любой из определенных vhost, apache принимает виртуальный хост по умолчанию. Виртуальный хост по умолчанию - это более или менее первый виртуальный хост. Запрос на IP принят, поскольку вы использовали определения подстановок *: 80.

Вы можете проверить VirtualHosts набора в апаче по апатит

# command apache2 -S 
Смежные вопросы