Похоже, вы путаете записи DNS A и виртуальные хосты Apache. Они работают на совершенно разных уровнях и на самом деле не взаимозаменяемы.
Для Apache, когда вы назначаете строфу <VirtualHost>
, вы сообщаете apache, что делать, когда он получает запросы на любой из ServerName
s в этой строфе. Однако до тех пор, пока эти имена не будут указывать на ваш сервер в DNS, никто из внешнего мира никогда не запросит их у вашего сервера, поэтому вам нужны оба.
(Да, я знаю, что пропускаю здесь подстановочные знаки, я пытаюсь сделать это простым для тех, кто явно плохо знаком с DNS и веб-хостингом)
Приведем пример. :Скажем, у вас есть запись A, указывающая www.foo.com
на ваш сервер по адресу 1.2.3.4
. И у вас есть следующая VirtualHost
строфа:
<VirtualHost *:80>
ServerName www.foo.com
DocumentRoot /var/www/html
-- etcetera ---
</VirtualHost>
Это сообщает вашему серверу Apache, что любые контакты на порту 80, запрашивающие www.foo.com, должны обрабатываться в соответствии с инструкциями в этом разделе.
Теперь предположим, что вы добавили субдомен:
<VirtualHost *:80>
ServerName sub.foo.com
ServerAlias sub2.foo.com
DocumentRoot /var/www/subdomain/html
--- etc ---
</VirtualHost>
Теперь вы сообщили своему серверу Apache, как отвечать на запросы sub.foo.com
и sub2.foo.com
. Однако до тех пор, пока вы не добавите запись A, указывающую sub.foo.com
на 1.2.3.4
, никто не узнает, на , что запросит у вашего сервера этот домен.