Рейтинг:0

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

флаг cn

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

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

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

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

Рейтинг:1
флаг in

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

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

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

Рейтинг:0
флаг ar
bob

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

Вы можете просто опустить их.

Руководство объясняет, когда вы это делаете:

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

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

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

флаг cn
Спасибо, но это не совсем то, что мне нужно. Это больше похоже на `ServerName foo.${HOSTNAME}`, который работал бы, если бы переменная окружения HOSTNAME действительно была установлена ​​для сервера Apache. К сожалению, кажется, что современные системы systemd дают очень чистые среды без этого значения, и нет никакого способа получить представление Apache об имени хоста в переменной. Простое исключение директив не сработает, потому что цель здесь состоит в том, чтобы иметь несколько фрагментов конфигурации, которые _независимы_ от собственного имени хоста машины. И в идеале работать со стандартной конфигурацией Apache.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.