У меня есть группа серверов 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 вместо