Виртуальный хост Apache 2.4 игнорируется

Я настраиваю новый веб-сервер с использованием Ubuntu 14.0, следуя здесь инструкции по созданию виртуальных хостов, однако мой единственный дополнительный виртуальный хост всегда загружает сайт по умолчанию (/ var / www / html).

Вот моя конфигурация vhost (я заменил свой домен на example.com, но в остальном он идентичен):

<VirtualHost *:80>
  ServerName example.com
  ServerAlias www.example.com

  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/example/app

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

Я не внес НИКАКИХ ДРУГИХ ИЗМЕНЕНИЙ в конфигурацию Apache 2.4, установленную в Ubuntu 14.

РЕДАКТИРОВАТЬ: я правильно включаю сайты и перезапускаю apache после внесения изменений в этот виртуальный хост.

Когда я захожу на example.com в своем браузере, я получаю сайт по умолчанию. Что я делаю неправильно? Как мне заставить этот виртуальный хост загружать правильный каталог?

РЕДАКТИРОВАТЬ: решением является отсутствие sudo в команде перезапуска (https://stackoverflow.com/a/23713299/225682).


person xtfer    schedule 16.09.2014    source источник


Ответы (6)


вам необходимо перезапустить сервер apache we после редактирования vhost, также вам нужно добавить enable vhost. включить:

sudo a2ensite example.conf (name of config file inside sites-available directory)

для перезапуска сервера:

sudo service apache2 restart

также проверьте разрешения для каталога www, возможно, пользователь apache не может прочитать этот каталог.

person pankijs    schedule 16.09.2014

Вы включили виртуальные хосты где-нибудь в своей конфигурации?

NameVirtualHost *:80
person Garreth McDaid    schedule 16.09.2014
comment
AH00548: NameVirtualHost не действует и будет удален в следующем выпуске - я думал, что это может сработать, но, видимо, теперь это происходит автоматически. - person xtfer; 16.09.2014
comment
Apache на Ubuntu немного затруднительно отлаживать, потому что они пытались сделать его защищенным от идиотов. Передо мной нет Ubuntu, но из того, что я помню в его дистрибутиве Apache 2, нет ли каталога с доступными сайтами и с поддержкой сайтов, а ваш файл vhosts должен быть в папке с поддержкой сайтов? Я думаю, что это то, что делает команда a2ensite, но вы можете проверить, действительно ли файл был скопирован. - person Garreth McDaid; 16.09.2014
comment
Директива NameVirtualHost не действует в Apache 2.4. - person Bryan Green; 12.04.2016

Наконец нашел ответ на странице https://stackoverflow.com/a/23713299/225682.

Apache необходимо перезапустить с помощью sudo, иначе изменения не действуют.

person xtfer    schedule 22.09.2014

Ну это моя история. У меня была свежая установка:

webmaster@ubuntuserver:/srv$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:        16.04
Codename:       xenial
webmaster@ubuntuserver:/srv$
webmaster@ubuntuserver:/srv$ apache2 -v
Server version: Apache/2.4.18 (Ubuntu)
Server built:   2017-09-18T15:09:02
webmaster@ubuntuserver:/srv$

Я использовал очень простую конфигурацию виртуального хоста:

<VirtualHost *:80>
ServerAdmin [email protected]
ServerName testsite.com
ServerAlias www.testsite.com
DocumentRoot /var/www/testsite
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Пробовал много предложений, таких как:

  • настройки прав доступа к каталогам;
  • содержимое каталога chmod до 774;
  • настройки брандмауэра;

Наконец решено с добавлением:

Listen 80

вверху конфигурации виртуального хоста, чтобы он выглядел так:

Listen 80
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName testsite.com
ServerAlias www.testsite.com
DocumentRoot /var/www/testsite
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

В конце концов виртуальные хосты начали отвечать и вели себя так, как ожидалось.

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

В любом случае вы также можете обратиться к документации Apache:

https://httpd.apache.org/docs/2.4/bind.html

person baltasvejas    schedule 31.12.2017
comment
Я не нашел никаких сообщений о том, что вы можете добавить прослушивание ... к файлу vhost. Я получаю сообщение об ошибке при этом - person Gerfried; 21.09.2020
comment
@Gerfried, согласно моему примеру, я не добавил Listen 80 внутри директивы VirtualHost, а поверх. Даже базовый пример конфигурации поставляется с Listen 80: http://httpd.apache.org/docs/2.4/vhosts/examples.html - person baltasvejas; 25.09.2020

На 6 лет опоздали, но, может быть, это кому-то поможет. При отладке подобных проблем сначала убедитесь, что apache видит вашу конфигурацию виртуального хоста: apachectl -S

Вы должны увидеть свою конфигурацию виртуального хоста на выходе:

*:80                   example.com (/etc/httpd/conf.d/example.com.conf:2)

Если вы его не видите, возможно, путь к файлу конфигурации не включен в основной файл конфигурации или у самого файла отсутствует расширение .conf.

Если вы видите свой VirtualHost на выходе, но вместо этого получаете VirtualHost по умолчанию, проверьте глобальную директиву ServerName в основном файле конфигурации. Он НЕ должен совпадать с вашим VirtualHost ServerName.

Будьте осторожны - если ваше глобальное имя сервера не установлено, apache получит его, используя rDNS. Поэтому, если обратная DNS-запись вашего IP-адреса совпадает с example.com (так же, как ваш VirtualHost), ваш VirtualHost может игнорироваться. Я считаю, что это очень частый источник проблем, и я еще не нашел этого на форумах. Если вы столкнулись с этой проблемой, проверьте запись rDNS вашего IP-адреса с помощью команды host.

person Pavel Zak    schedule 20.10.2020

Попробуйте запустить команду apachectl с параметром -t, это проверяет правильность всей конфигурации. Какой файл это виртуальный хост. Вы перезапустили apache, чтобы принять эти изменения?

apachectl restart
person ScottFree    schedule 16.09.2014
comment
Спасибо за предложение. Все проверено. - person xtfer; 16.09.2014
comment
Попробуйте добавить запись в файл / etc / hosts, например: 127.0.0.1 www.example.com, это не имеет значения, похоже, запрос не содержит информацию заголовка хоста! - person ScottFree; 16.09.2014
comment
Пробовал. Ничего не менял. Однако инспектор Chrome предполагает, что информация заголовка хоста отправляется. - person xtfer; 16.09.2014