Я не могу заставить мои виртуальные хосты нормально работать в Apache
Хотя я знаю, что эта тема уже обсуждалась в некоторых других темах, где объясняется, как настроить Virtualhosts в Apache. Дело в том, что после поиска возможных ответов на мою проблему здесь, исследования в Google и чтения официальной документации Apache, я не могу решить свою проблему.
Во-первых, у меня была запущена одна установка WordPress на Apache 2.4, установленная в CentOS 7, и я настроил следующий Virtualhost:
<VirtualHost *:80>
ServerName subdomain1.domain.com
ServerAlias www.subdomain1.domain.com
DocumentRoot /some/path/to/wordpress
<Directory "/some/path/to/wordpress">
DirectoryIndex index.php
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/subdomain1-error.log"
CustomLog "logs/subdomain1-access.log" combined
LogLevel warn
</VirtualHost>
Это работало нормально, но затем я решил добавить установку Moodle (потому что на сервере не слишком много трафика), а затем, если я просматриваю Chrome subdomain1.domain.com или subdomain2.domain.com, это не имеет значения, Chrome всегда переходит на subdomain2.domain.com (веб-сайт Moodle).
Я пробовал в Chrome и Firefox с одинаковыми результатами. Виртуальный хостинг Moodle - это:
<VirtualHost *:80>
ServerName subdomain2.domain.com
ServerAlias www.subdomain2.domain.com
DocumentRoot /some/path/to/moodle
<Directory "/some/path/to/moodle">
DirectoryIndex index.php
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/subdomain2-error.log"
CustomLog "logs/subdomain2-access.log" combined
LogLevel warn
</VirtualHost>
Кроме того, файл конфигурации Apache httpd.conf включает эти VirtualHosts с помощью директивы: IncludeOptional conf.d/*. Conf
Файл /etc/hosts
является:
127.0.0.1 localhost
134.122.191.221 subdomain1.domain.com
134.122.191.221 subdomain2.domain.com
Я не вижу явной ошибки в моих файлах конфигурации Apache Virtualhosts, поэтому я был бы признателен, если бы кто-нибудь дал мне подсказку о том, что это не так и о любой возможной ошибке.
Большое спасибо.
1 ответ
Вы пытаетесь настроить виртуальный хост на основе имени и пропустите важную конфигурацию:
NameVirtualHost *:80
Итак, добавьте приведенную выше строку в ваш httpd.conf и перезапустите apache/httpd, и это должно решить проблему.
NB. Согласно документации Apache 2.4, эта директива устарела и больше не нужна.
До 2.3.11,
NameVirtualHost
требовалось указать серверу, что конкретный IP-адрес и комбинация портов могут использоваться в качестве виртуального хоста на основе имени. В 2.3.11 и более поздних версиях каждый раз, когда комбинация IP-адреса и порта используется в нескольких виртуальных хостах, виртуальный хостинг на основе имени автоматически включается для этого адреса.
Но мне еще предстоит выяснить, почему это работает с вышеуказанной директивой.