Есть ли способ определить виртуальный хост Apache 2 с частичным ServerName?

Есть ли способ определить виртуальный хост Apache 2 с частичным ServerName?

У меня есть инструмент, который генерирует блоки конфигурации Apache 2. Я бы хотел, чтобы то, что он генерирует, не зависело от фактического ServerName, но при этом не требовало бы фактического запуска/анализа конфигурации Apache целевой машины.

Другими словами, мне нужно что-то вроде этого:

<VirtualHost *>
   ServerName foobar    // <-- no top level domain
   ...
</VirtualHost>

Из прочтения документации следует, что поле ServerName всегда должно быть полностью квалифицированным доменным именем, и, таким образом, по сути, блок vhost не может быть написан без знания FQDN целевого сервера. Это правда или есть какой-то обходной путь?

решение1

Да, это ServerNameдолжен быть реальный идентификатор сервера, но может быть и IP-адрес. ServerAliasс другой стороны, может содержать подстановочные знаки. Документацияупоминает об этом.

Но там также сказано, что это не обязательно

Если ServerName не указано, сервер пытается определить видимое клиенту имя хоста, сначала запрашивая у операционной системы имя хоста системы, а если это не удается, выполняет обратный поиск по IP-адресу, присутствующему в системе.

решение2

Ни один из нихServerNameниServerAliasявляются обязательными директивами в блоке VirtualHost.

Их можно просто опустить.

В руководстве объясняется, когда это нужно сделать:

Если не ServerNameуказано иное, сервер пытается определить видимое имя хоста клиента, сначала запрашивая у операционной системы имя хоста системы, а если это не удается, выполняет обратный поиск по IP-адресу, присутствующему в системе.

что может быть именно тем, что вам нужно.

Кроме того,на практикеЭти директивы также принимают практически любую строку...
Одно слово, например localhostили testи , exampleбудет работать, как и то, что больше похоже на полные доменные имена, но не является фактическими рабочими именами DNS, например there.is.no.tld.named.serverfault.Использование чего-то подобного может привести к появлению предупреждения при запуске в журнале ошибок (чего можно избежать, добавив эту строку в /etc/hosts) и может привести к ситуации, когда Apache httd не сможет отличить ваш блок VirtualHost от других имеющихся, и ваши настройки не вступят в силу.https://httpd.apache.org/docs/2.4/vhosts/details.html

Связанный контент