Вопрос: Что случилось с моим 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?

Дополнительные симптомы - vccbbcc vhost переопределяет только некоторые из моих других vhosts. Не все.

Дополнительные замечания

Я обязательно использовал 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! Что происходит?


4
2018-04-15 16:14


Источник




Ответы:


Как вы можете прочитать Глубокое обсуждение соответствия виртуального хоста:

Первый призрак в этом списке (   первый vhost в файле конфигурации с   указанный 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, так что сначала загружается файл по умолчанию.


8
2018-04-20 08:11



У Apache есть несколько файлов конфигурации, что «файл конфигурации» для проверки «списка хостов» в этом контексте? Я предполагаю, что это «/ etc / apache2 / sites-available»? - Edwin Yip
Хорошо, я, кажется, понял это, есть строка в моем apache3.conf: Include /etc/apache2/sites-enabled/, и когда я ls в этом каталоге появился первый элемент - кулак vhost.... - Edwin Yip


У вас есть директива NameVirtualHost?

Глянь сюда: http://httpd.apache.org/docs/2.0/mod/core.html#namevirtualhost

В принципе, если у вас нет указателя NameVirtualHost * или конкретной директивы NameVirtualHost 1.1.1.1:80, виртуальный хост не основан на имени, это адрес: на основе порта.


1
2018-04-15 16:18



У меня есть NameVirtualHost 1.1.1.1:80 Прослушать 80 Прослушать 443 в моем ports.conf - John
Как настроены ваши символические ссылки на сайтах? Они получены в алфавитном порядке, и я не уверен, но Apache может по умолчанию использовать первую директиву VirtualHost для комбинации хостов: порт. - Kyle Smith
Я не понимаю символические ссылки. Как я могу проверить? Кроме того, я думаю, что я заметил алфавитный порядок имен файлов VirtualHost, влияющих на выбор хоста: порт. Но не должно ли свойство ServerName сделать выбор более конкретным / отфильтрованным? - John


Без блока ServerName / ServerAlias ​​на ваших виртуальных хостах apache будет обслуживать домен, сначала созданный при чтении конфига. В этом случае, в алфавитном порядке, файл конфигурации ccbbcccc.com должен появиться перед значением по умолчанию.

Добавьте директивы ServerName и / или ServerAlias ​​в / etc / apache2 / sites-enabled / default, и вы должны быть установлены.


1
2018-04-15 17:31



Спасибо, я сделал это, но все равно никакого эффекта. Я заметил, что под / etc / apache2 / sites-enabled / есть файл с именем 000-default. По-видимому, apache автоматически переименовывает мой default по умолчанию 000, чтобы убедиться, что он загружается первым. - John
вы можете публиковать результаты: / usr / sbin / apache2 -S
Хм ... Я получаю «apache2: плохое имя пользователя $ {APACHE_RUN_USER}». Что это значит? - John
вы установили apache из пакета? или скомпилировать его самостоятельно? После того, как вы вносите изменения в конфигурацию, вы останавливаете apache, ps ax | grep apache, убедитесь, что он остановлен, а затем перезагрузите его? в вашем файле конфигурации, Пользователь должен соответствовать значению, есть ли имя пользователя в вашей системе, которое соответствует?