Несколько дочерних доменов 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>
Другие вопросы по тегам