Nome do host da máquina de envio como um cabeçalho no Apache

4

Eu tenho um grupo de servidores linux apache 1.3 atrás de um balanceador de carga, e eu quero ser capaz de, de relance, determinar qual servidor eu estou atingindo. O balanceador de carga é severamente limitado em seus recursos de monitoramento, então o que eu gostaria de fazer é configurar o apache para enviar um cabeçalho adicional indicando o nome do host da máquina.

Eu sei que eu poderia apenas codificar um cabeçalho no httpd.conf com o nome do host:

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

No entanto, todos os servidores em questão são espelhados com o rsync, incluindo as configurações, então a codificação rígida dos nomes de host está fora. Existe uma maneira de chamar o comando hostname e despejá-lo em um cabeçalho?

Esclarecimento: Como vários hosts virtuais residem nesses servidores, eu quero o nome do host da máquina física, não o nome do domínio na solicitação.

    
por EvanK 02.09.2009 / 18:00

4 respostas

2

Não testado, mas que tal passar a linha através do script init (ou de outra inicialização)? Algo como:

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

Se você estiver usando uma distro com sabor de RH, talvez seja possível incluir isso em /etc/sysconfig/httpd ou similar para evitar a edição do script de inicialização.

    
por 02.09.2009 / 21:11
8

Você precisa passar uma variável de ambiente usando mod_env:

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

Você pode definir o valor de HOSTNAME através do arquivo envvars (o meu é / etc / apache2 / envvars)

Além disso, se você estiver usando PHP, você pode usar variáveis de ambiente

    
por 02.09.2009 / 18:30
1

Eu tive esse mesmo problema e resolvi usando a diretiva de configuração PassEnv Apache que importa uma variável de ambiente do shell do sistema para o ambiente de configuração do Apache.

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

Felizmente para mim, descobri que o HOSTNAME já estava configurado no ambiente de shell do meu sistema. Você pode verificar o que está disponível no seu ambiente de shell usando printenv na linha de comando.

Portanto, enquanto a variável de ambiente HOSTNAME for configurada de forma diferente em cada servidor, você ainda poderá ter configurações idênticas do Apache para todos e cada uma reportará sua identidade exclusiva no cabeçalho.

Eu testei isso no CentOS 7 com o Apache 2.4. Eu tentei pesquisar os documentos do Apache para V1.3 para ver se as mesmas diretivas estavam disponíveis naquela versão, mas parece que os documentos anteriores à versão 2.2 não estão mais disponíveis no apache.org.

    
por 22.02.2018 / 04:24
0

Com o Apache 2.4.9 no Ubuntu 18.04, isso funcionou para mim

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}

O que realmente acabou funcionando para mim e minha configuração de proxy foi usar ProxyVia em vez disso

    
por 17.08.2018 / 17:39