Apache не использует DocumentRoot после обновления до Ubuntu 13.10 (использует страницу по умолчанию, на которой написано, что это работает!)

У меня есть различные виртуальные хосты для моей работы по веб-разработке, включая cnm.

sites-available/cnm

мой файл говорит очень просто:

<VirtualHost *:80>
    ServerName cnm
    DocumentRoot /var/www/cnm/public_html
</VirtualHost>

Я обновился до Ubuntu 13.10, и когда я указываю браузеру cnm/, я вижу файл /var/www/index.html, который, кажется, указан в файле по умолчанию.

sites-available/000-default.conf

в котором говорится (среди прочего):

<VirtualHost *:80>
    DocumentRoot /var/www

Что мне нужно сделать, чтобы Apache читал корень моего документа cnm, когда я просматриваю cnm/ ?

ЗАМЕТКИ:

  1. Я уже пробовал переименовывать файл "sites-available/cnm" в "sites-available/cnm.conf" и включать его с помощью a2ensite cnm и service apache2 reload. Это хорошо, но ничего не меняет.

  2. Я уже пытался изменить <VirtualHost *:80> на <VirtualHost cnm.localhost> или на <VirtualHost cnm>. Это ничего не сделало.


person Tom Haws    schedule 07.11.2013    source источник


Ответы (7)


Ubuntu 13.10 использует apache 2.4, вы должны проверить всю свою конфигурацию apache. Но в данном случае вы должны отметить, что команды a2ensite и a2dissite не смогут увидеть ваши файлы в /etc/apache2/sites-available, если он не заканчивается на .conf, поэтому переименуйте его в sites-available/cnm.conf и запустите a2ensite cnm.

Тогда ваше определение Virtualhost, безусловно, лучше с *:80, это означает, что этот виртуальный хост активирован для всех IP-интерфейсов (*) на порту 80. cnm.localhost или cnm здесь недопустимые значения, только IP-номера (Ip вашего сервера apache) или * для всех и номер порта.

Затем проверьте, как apache читает вашу конфигурацию, выполнив следующие команды:

# load apache env
# be careful, there is a dot and a space
. /etc/apache2/envvars
# Check apache Virtualhosts config
apache2 -S

Вы должны получить что-то вроде:

VirtualHost configuration:
*:80                   is a NameVirtualHost
     default server something (/etc/apache2/sites-enabled/000-default.conf:1)
     port 80 namevhost something (/etc/apache2/sites-enabled/000-default.conf:1)
     port 80 namevhost cnm (/etc/apache2/sites-enabled/cnm.conf:4)

Если все в порядке, и если у вас есть правильный IP-адрес в вашем файле hosts для cnm, и вы можете проверить это с помощью ping, то при использовании http://cnm/ следует использовать виртуальный хост с cnm в ServerName.

Если у вас есть ответ от виртуального хоста по умолчанию, это означает, что apache не находит имя, используемое в заголовке вашего хоста, в списке ServerName и ServerAlias, доступных для этого IP/порта, и откатывается к виртуальному хосту по умолчанию. Если вы действительно застряли (и вы не забыли перезагрузиться), вы всегда можете удалить виртуальный хост по умолчанию и оставить только тот, над которым вы работаете.

person regilero    schedule 07.11.2013
comment
Спасибо! Мой Note 1 говорит, что я уже пробовал это, и это не помогло. Я все еще вижу /var/www/index.html вместо /var/www/cnm/index.html :-) - person Tom Haws; 07.11.2013
comment
У меня такая же проблема и это не помогло. Мои виртуальные хосты работают, они просто не слушают настройку DocumentRoot. . /etc/apache2/envvars ничего не выводит. Есть идеи? - person Redsandro; 19.11.2013
comment
@Redsandro Команда dot с envvars предназначена только для загрузки переменных env apache, поэтому вы можете запускать apache2 -h и все остальные команды apache2 -X без ошибок конфигурации для отсутствующих переменных env. Теперь нет listen для documentRoot, если у вас есть проблема, объясните это подробно на этом сайте или serverfault.com - person regilero; 19.11.2013
comment
Я имею в виду, слушай, как собака слушает, когда ты даешь ей команду. :P Я уже нашел проблему (см. мой ответ ниже). По-видимому, старые vhosts несовместимы. - person Redsandro; 19.11.2013
comment
Ничто из этого мне не помогает, мой DocumentRoot не распознается после его определения в файле 000-default.conf, как видно из вывода apache2 -S. Любые подсказки? - person engineer; 15.01.2014
comment
@engineer: создайте новый вопрос и добавьте в этот вопрос список файлов, присутствующих в /etc/apache2/sites/*, вывод apache2 -S и т. д., подробности, подробности, подробности, ошибка определенно в одном из эти детали, и мы не можем догадаться, где он находится без информации. - person regilero; 15.01.2014
comment
Вот оно: stackoverflow.com/questions/21136194/ - person engineer; 15.01.2014
comment
Также имейте в виду, что они изменили директивы управления доступом (например, Order deny,allow Deny from all на Require all denied), см. изменяется при обновлении с 2.2 до 2.4 - person PhoneixS; 15.01.2014
comment
Сочетание этого ответа и комментария @PhoneixS решило это для меня. - person authentictech; 08.06.2014

Я нашел ответ на свой вопрос. Мне нужно было удалить файлы в /etc/apache2/sites-enabled.

  1. Удалить файлы в /etc/apache2/sites-enabled
  2. Переименуйте файлы конфигурации в /etc/apache2/sites-available, чтобы иметь окончание .conf
  3. Для каждого файла в доступных сайтах запустите sudo a2ensite mysite.
  4. Беги sudo service apache2 reload
person Tom Haws    schedule 07.11.2013
comment
У меня такая же проблема и это не помогло. Мои виртуальные хосты работают, просто не слушают настройку DocumentRoot. - person Redsandro; 19.11.2013
comment
Шаг 2... нереально. Спасибо. - person G-Wiz; 21.09.2014

Я не мог найти пошаговое руководство о том, как заставить его работать на моей стороне. Я собрал кусочки тут и там, поэтому для тех, кому нужно выполнить все шаги, вот:

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/local-mydefault.conf

$ sudo gedit /etc/apache2/sites-available/local-mydefault.conf

Вставьте следующее в файл local-mydefault.conf (измените путь '/your/full/path' туда, где вы хотите хранить свои файлы. И измените имя пользователя на свое собственное):

# ------------------------------------------------------
<VirtualHost *:80>
    ServerName localhost
    ServerAdmin webmaster@localhost

    DocumentRoot /your/full/path
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /your/full/path>
            DirectoryIndex index.php
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Require all granted
            allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

User username
Group username
# ------------------------------------------------------

Затем введите следующие команды

$ cd /etc/apache2/sites-available/
$ sudo a2ensite local-mydefault.conf
$ sudo a2dissite 000-default.conf
$ sudo /etc/init.d/apache2 restart
person Abu Junayd    schedule 19.09.2014
comment
Требуется ли часть ‹Directory /›? Кажется, ничего не делает для меня. Но другие вещи решили мою проблему :) (я думаю, теперь вам нужно явно указать все параметры для вашего каталога, но я не уверен) - person CJBrew; 10.12.2014
comment
@CJBrew Я не уверен. Мой ответ выше — это все части, которые я собрал в ходе исследования, которое я провел в то время, чтобы решить свою проблему. Но я уже забыл, что именно делают все эти штуки :-/ - person Abu Junayd; 11.12.2014

Я нашел ответ на этот вопрос:

При обновлении до Ubuntu 13.10 DocumentRoot не имеет значения.

Это связано с тем, что Apache 2.4 переместил конфигурацию каталога в другое место. В ваших старых файлах .conf все еще есть эти строки:

    DocumentRoot "/var/www/myVhost"
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory "/var/www/myVhost">
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

Удалите (или закомментируйте) директивы <Directory>, чтобы у вас было только:

    DocumentRoot "/var/www/myVhost"

Теперь перезагрузите настройки: service apache2 reload и DocumentRoot вернулись. :)

person Redsandro    schedule 19.11.2013
comment
Ничего из этого мне не помогает, мой DocumentRoot не распознается после его определения в файле 000-default.conf. Любые подсказки? - person engineer; 15.01.2014
comment
Без понятия, здесь работает. Может быть, добавить www-data как user:group? - person Redsandro; 15.01.2014

Переименуйте файл конфигурации "cnm" с расширением .conf

mv sites-available/cnm sites-available/cnm.conf
a2ensite sites-available/cnm.conf

И готово!

service apache2 reload
person geralOE    schedule 31.01.2014

У меня та же проблема: отключить 000-default и перезагрузить apache, но это не решение, потому что у вас должен быть только один виртуальный хост одновременно :(

sudo a2dissite 000-default.conf
sudo service apache2 reload
person Saman Mohamadi    schedule 29.07.2014

Я столкнулся с похожей проблемой. Имя моего сервера и мое полное доменное имя были одинаковыми, так как по умолчанию он работал в каталоге /var/www/html. Я отключил конфигурацию по умолчанию, и мой сайт работал как ветер. Спасибо @regilero.

sudo a2dissite 000-default.conf

исправил это для меня.

person Mr. Doomsbuster    schedule 28.11.2015