Несколько дочерних доменов Apache с одним IP-адресом
Вероятно, об этом спрашивали, но я не могу найти прямой ответ, или те, которые я нашел, не работают.
У меня есть один домен mydomain.com, разрешающий IP; давайте назовем это 8.8.8.8. Настройки DNS также указывают два субдомена на этот IP-адрес с записью А. Это dev.mydomain.com и staging.mydomain.com. Оба имеют A-запись, указывающую на 8.8.8.8.
На сервере (8.8.8.8) у меня есть два файла виртуальных хостов. Это следующие:
staging.mydomain.com.conf
<VirtualHost *:80>
ServerName staging.mydomain.com
DocumentRoot /var/www/html/mydomain.com/staging/
</VirtualHost>
А также...
dev.mydomain.com.conf
<VirtualHost *:80>
ServerName dev.mydomain.com
DocumentRoot /var/www/html/mydomain.com/dev/
</VirtualHost>
Проблема в:
Независимо от того, посещаю ли я http://staging.mydomain.com/ или http://dev.mydomain.com/, я всегда захожу на staging.mydomain.com (Apache обслуживает эти файлы).
Я перезапустил Apache и даже сервер. Если я изменю порядок файлов.conf так, чтобы dev был первым, я всегда это вижу. Любые предложения будут так оценены. Спасибо!
Обновить
Я снова возвращаюсь к этой проблеме! Если вы знаете, что ваш синтаксис правильный, возможно, у вас плохая символическая ссылка. Удалите его и создайте заново, перезапустив apache между ними. Я только сделал это, и это решило часы царапин головы. На CentOS
вы можете проверить ваши доступные Vhosts с httpd -S
обновление 2
Я также обнаружил, что эта проблема существует, когда файлы журнала apache для виртуального хоста не существуют или недоступны для записи.
1 ответ
Похоже, вам нужно добавить NameVirtualHost
Директива к вашей конфигурации.
NameVirtualHost *:80
В некоторых случаях Apache может не справиться *:80
VirtualHosts правильно. В этих случаях вы должны сопоставить VirtualHosts непосредственно на определенных IP-адресах.
NameVirtualHost 8.8.8.8:80
<VirtualHost 8.8.8.8:80>
ServerName staging.mydomain.com
ServerAlias stage.mydomain.com
DocumentRoot /var/www/html/mydomain.com/staging/
</VirtualHost>
<VirtualHost 8.8.8.8:80>
ServerName dev.mydomain.com
ServerAlias development.mydomain.com
DocumentRoot /var/www/html/mydomain.com/dev/
</VirtualHost>
Вы также можете запустить apachectl -t -D DUMP_VHOSTS
чтобы увидеть, как Apache анализирует конфигурацию VirtualHost.
Обновление: как уже упоминалось в комментариях, обычно вы можете просто использовать NameVirtualHost *:80
, Поэтому большую часть времени вы можете настроить виртуальные хосты следующим образом.
NameVirtualHost *:80
<VirtualHost *:80>
ServerName staging.mydomain.com
ServerAlias stage.mydomain.com
DocumentRoot /var/www/html/mydomain.com/staging/
</VirtualHost>
<VirtualHost *:80>
ServerName dev.mydomain.com
ServerAlias development.mydomain.com
DocumentRoot /var/www/html/mydomain.com/dev/
</VirtualHost>