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

Что не так с моим VirtualHost?

У меня есть следующий 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, и вы должны быть настроены.