Pergunta

Temos várias máquinas de servidores web com balanceamento de carga executando o mesmo webapp PHP (LÂMPADA) e gostaria de executar um código ligeiramente diferente em cada servidor (para fins de teste).Eu esperava usar o $_SERVER['SERVER_ADDR'] super global para fazer algo assim:

if ($_SERVER['SERVER_ADDR'] == 'XXX.XXX.XXX.XXX') {
  echo "Do one thing";
} elseif ($_SERVER['SERVER_ADDR'] == 'YYY.YYY.YYY.YYY') {
  echo "Do something else";
}

Infelizmente, isso não funciona porque ambas as máquinas estão configurando $_SERVER['SERVER_ADDR'] para '127.0.0.1'.Como posso configurá-los para que $_SERVER['SERVER_ADDR'] está definido para seu endereço IP público?

Eu estou supondo que o problema pode ter algo a ver com /etc/hosts então, para referência, atualmente se parece com isto:

127.0.0.1       localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
XXX.XX.XX.XX    blahblah

Atualizar...

Ops!Deixei de considerar o nginx proxy reverso na frente dos servidores web.Todo o tráfego para esses servidores web chega do nginx devido à seguinte linha na configuração do nginx:

location / {
    root                  /var/www/staging/current;
    proxy_pass            http://localhost:8880;
}
Foi útil?

Solução

Certamente é tão simples quanto

$ip = getHostByName(php_uname('n')); 
echo $ip;

Outras dicas

Provavelmente envolveria alterar a forma como o balanceador de carga se conecta ao servidor.Não sei que software é esse.

Talvez seja melhor mudar com base em algum outro fator que muda entre as máquinas.Uma boa aposta seria o nome do host:

$host= php_uname('n');
switch($host) {
    case 'webserver1':
        ...do one thing...
        break;
    case 'webserver2':
        ...do another thing...
        break;
    default:
        die('No configuration for unknown host '.$host);
}

linhas invertidas em /etc/hosts

XXX.XX.XX.XX    blahblah
127.0.0.1       localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6

Deveria trabalhar

Use isso com mais precisão!

echo getHostByName($_SERVER[HTTP_HOST]);

Para corrigir meu problema, tenho três ideias:

  1. Eu poderia codificar o endereço IP de cada servidor em uma variável PHP em um arquivo de configuração que temos em cada servidor.
  2. Eu poderia usar o proxy reverso adiciona módulo de encaminhamento para Apache (mod_rpaf).
  3. Eu poderia mudar o proxy_pass em cada servidor para ir XXX.XXX.XXX.XXX:8880 e YYY.YYY.YYY.YYY:8880 em vez de localhost?

você realmente deve ter alguma configuração específica do servidor que seja carregada e um ID do servidor dentro.cada sistema se comportará de maneira diferente e, ao buscar endereços IP, o nome do host é definitivamente muito vulnerável a erros.normalmente existem muitos aplicativos no servidor e de um dia para outro ele pode não funcionar mais e você terá dificuldade em depurar (por exemplo, alguém teve a boa ideia de configurar uma entrada reversa para que os e-mails não recebam mais spam? )

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top