Подтвердить что ты не робот

Несколько поддоменов Apache с одним IP-адресом

Это, вероятно, было задано, но я не могу найти прямой ответ, или те, которые я нашел, не работают.

У меня есть один домен mydomain.com, который разрешает IP; позвольте называть его 8.8.8.8. Настройки DNS также указывают на два поддомена на этот IP-адрес с записью A. Это 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 был первым, я всегда это вижу. Любые предложения будут так оценены. Спасибо!


Обновление

Я снова возвращаюсь к этой проблеме! Если вы знаете, что ваш синтаксис верен, у вас может быть плохая символическая ссылка. Удалите его и снова заново создайте, перезапустив апач между ними. Я просто сделал это, и он решил часами царапин на голове. В CentOS вы можете проверить доступные vhosts с помощью httpd -S

обновление 2

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

4b9b3361

Ответ 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>