Назад | Перейти на главную страницу

Имя хоста отправляющей машины в качестве заголовка в Apache

У меня есть группа серверов linux apache 1.3 за балансировщиком нагрузки, и я хочу иметь возможность сразу определить, на какой сервер я обращаюсь. Балансировщик нагрузки сильно ограничен в своих возможностях мониторинга, поэтому я бы хотел настроить apache для отправки дополнительного заголовка, указывающего имя хоста машины.

Я знаю, что могу просто жестко закодировать заголовок в httpd.conf с именем хоста:

Header set X-Which-Host-Am-I 'host1'

Однако все рассматриваемые серверы зеркалируются с помощью rsync, включая конфигурации, поэтому жесткое кодирование имен хостов отсутствует. Есть ли способ позвонить hostname команду и выгрузить в шапку?

Уточнение: Поскольку на этих серверах находится несколько виртуальных хостов, мне нужно имя хоста физического компьютера, а не имя домена в запросе.

Вам нужно передать переменную среды с помощью mod_env:

PassEnv HOSTNAME
Header set X-Hostname "%{HOSTNAME}e"

Вы можете установить значение HOSTNAME через файл envvars (мой - / etc / apache2 / envvars)

Кроме того, если вы используете PHP, вы можете использовать переменные среды

Непроверено, но как насчет передачи строки через сценарий инициализации (или другой сценарий запуска)? Что-то вроде:

/path/to/httpd -c "Header set X-Hostname $HOSTNAME"

Если вы используете дистрибутив с RH-ароматом, вы можете втиснуть его в /etc/sysconfig/httpd или подобное, чтобы избежать редактирования сценария инициализации.

У меня была такая же проблема, и я решил ее с помощью PassEnv Директива конфигурации Apache, которая импортирует переменную среды из системной оболочки в среду конфигурации Apache.

PassEnv HOSTNAME
Header set X-Which-Host-Am-I "%{HOSTNAME}e"

К счастью для меня, я обнаружил, что HOSTNAME уже был установлен в моей системной оболочке. Вы можете проверить, что доступно в вашей среде оболочки, используя printenv в командной строке.

Таким образом, пока переменная среды HOSTNAME установлена ​​по-разному на каждом сервере, вы все равно можете иметь одинаковые конфигурации Apache для всех, и каждый будет сообщать об уникальном идентификаторе в заголовке.

Я тестировал это на CentOS 7 с Apache 2.4. Я попытался найти документы Apache для V1.3, чтобы узнать, доступны ли те же директивы в этой версии, но кажется, что документы до версии 2.2 больше не доступны на apache.org.

С Apache 2.4.9 на Ubuntu 18.04 это сработало для меня

nano /etc/apache2/envvars
export HOSTNAME=$(hostname)

nano /etc/apache2/sites-available/default-ssl.conf
<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                Header set X-Hostname ${HOSTNAME}

Что на самом деле сработало для меня и моей настройки прокси, так это использовать ProxyVia вместо