Я понимаю концепции виртуальных хостов на основе имен (то есть обслуживания двух доменных имен по-разному) и виртуальных хостов на основе IP (то есть обслуживания двух IP по-разному)
Но...
Всегда ли мне указывать IP-адрес или можно использовать *? Многие примеры виртуального хостинга на основе имен все еще указывают IP-адреса. Почему VirtualHost является блоком, а NameVirtualHost - директивой? Зачем мне нужен NameVirtualHost для виртуальных хостов на основе IP?
Всегда ли мне указывать IP-адрес или можно использовать *?
Вы можете указать * в обеих директивах.
NameVirtualHost *
<VirtualHost *> ...
Почему VirtualHost является блоком, а NameVirtualHost - директивой?
NameVirtualHost определяет только IP, на котором вы будете использовать имена виртуальных хостов. Не содержит других директив, поэтому нет причин блокировать его. С другой стороны, VirtualHost действительно содержит другие директивы для конкретного виртуального хоста, поэтому он должен быть блоком.
Зачем мне нужен NameVirtualHost для виртуальных хостов на основе IP?
Тебе это не нужно. Видеть пример.
Рекомендуемая литература: Документация по виртуальному хосту Apache