У меня есть следующий VirtualHost
// filename: /etc/apache2/sites-available/ccbbbcc
<VirtualHost 1.1.1.1:80>
ServerAdmin utopia@ccbbbcc.com
ServerName ccbbbcc.com
ServerAlias www.ccbbbcc.com
DocumentRoot /srv/www/ccbbbcc/production/public_html/
ErrorLog /srv/www/ccbbbcc/production/logs/error.log
CustomLog /srv/www/ccbbbcc/production/logs/access.log combined
</VirtualHost>
А еще у меня есть
//filename: /etc/apache2/sites-available/default
<VirtualHost 1.1.1.1:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
blah blah blah
Почему, когда я печатаю в браузере http://1.1.1.1, это приводит меня к http://ccbbbcc.com ? Даже когда я указываю новые URL-адреса на IP 1.1.1.1, веб-страницы обслуживаются с http://ccbbbcc.com. Почему я не могу обслуживать страницы из каталога / var / www?
Дополнительные симптомы - vhost ccbbbcc отменяет только НЕКОТОРЫЕ другие мои vhost. Не все.
Я обязательно использовал a2ensite и перезапустил apache.
Так выглядит мой /etc/apache2/ports.conf
NameVirtualHost 1.1.1.1:80
Listen 80
Listen 443
Я создал файл с названием /srv/www/ccbbbcc/production/public_html/test.html с текстом «Hello World». Когда я печатаю http://ccbbbcc.com/test.html, страница загружается нормально. Когда я печатаю http://1.1.1.1/test.html, Я получаю сообщение 404 "Страница не найдена". Когда я печатаю http://1.1.1.1/, веб-браузер обновится, а затем отобразит URL-адрес http://ccbbbcc.com. Затем я добавляю test.html в конец URL-адреса, и снова появляется Hello World.
Значит ли это, что где-то происходит перенаправление http? Если так, то я не могу определить, что его вызывает.
Кроме того, я заметил, что ccbbbcc переопределяет НЕКОТОРЫЕ из моих виртуальных хостов, а не ВСЕ. Кажется, не существует шаблона, по которому vhost распознается / переопределяется.
Я также заметил, что если я сделаю следующее
1. a2dissite ccbbbcc
2. /etc/init.d/apache2 reload
3. a2ensite ccbbbcc
4. /etc/init.d/apache2 reload
Тогда внезапно http://ccbbbcc.com обслуживает страницы из / var / www / и http://1.1.1.1 также обслуживает страницы из / var / www. Почему a2ensite / a2dissite влияет на то, откуда загружаются страницы? Единственный способ заставить ccbbbcc снова обслуживать страницы из / srv / www / cbs / production - это перезагрузить весь мой Linux-сервер! В чем дело?
Как вы можете прочитать в Углубленное обсуждение сопоставления виртуальных хостов:
Первый виртуальный хост в этом списке (первый виртуальный хост в файле конфигурации с указанным IP-адресом) имеет наивысший приоритет и перехватывает любой запрос на неизвестное имя сервера или запрос без поля заголовка Host :.
Ваш Apache httpd загружает и оценивает файл /etc/apache2/sites-available/ccbbbcc
перед /etc/apache2/sites-available/default
.
Переименовать /etc/apache2/sites-available/default
например, чтобы /etc/apache2/sites-available/00_default
и /etc/apache2/sites-available/ccbbbcc
к /etc/apache2/sites-available/01_ccbbbcc
, так что файл по умолчанию загружается первым.
У вас есть директива NameVirtualHost?
Посмотреть здесь: http://httpd.apache.org/docs/2.0/mod/core.html#namevirtualhost
Обычно, если у вас нет NameVirtualHost * или конкретной директивы NameVirtualHost 1.1.1.1:80, виртуальный хост не основан на имени, а на основе адреса: порта.
Без блока ServerName / ServerAlias на ваших виртуальных хостах apache будет обслуживать домен, впервые созданный во время чтения конфигурации. В этом случае конфигурационный файл ccbbbccc.com в алфавитном порядке должен располагаться перед файлом по умолчанию.
Добавьте директивы ServerName и / или ServerAlias в / etc / apache2 / sites-enabled / default, и вы должны быть настроены.