Question

Nous avons plusieurs à charge équilibrée serveur web machines exécutant le même PHP webapp (LAMPE) et je voudrais exécuter du code légèrement différent sur chaque serveur (pour des fins de test).J'espérais que l'utilisation de la $_SERVER['SERVER_ADDR'] super mondial de faire quelque chose comme ceci:

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

Malheureusement, cela ne fonctionne pas parce que les deux machines sont de réglage $_SERVER['SERVER_ADDR'] à '127.0.0.1'.Comment puis-je configurer de sorte que $_SERVER['SERVER_ADDR'] est mis à leur adresse IP publique?

Je suppose que le problème peut être quelque chose à faire avec /etc/hosts donc, pour refererence actuellement, il ressemble à ceci:

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

Mise à jour...

Oups!J'ai négligé de considérer l' nginx reverse proxy devant les serveurs web.Tout le trafic vers ces serveurs web arrive de nginx en raison de la ligne suivante dans la conf nginx:

location / {
    root                  /var/www/staging/current;
    proxy_pass            http://localhost:8880;
}
Était-ce utile?

La solution

Sûrement, c'est aussi simple que

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

Autres conseils

Il faudrait probablement changer votre façon de l'équilibreur de charge se connecte au serveur.Je ne sais pas quel logiciel il s'agit.

Vous pourriez être mieux de commutation basé sur un autre facteur qui change entre les machines.Un bon pari serait le nom de l'hôte:

$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);
}

inverser les lignes dans /etc/hosts

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

devrait fonctionner

L'utilisation de ce plus précise!

echo getHostByName($_SERVER[HTTP_HOST]);

Pour résoudre mon problème, j'ai 3 idées:

  1. Je pourrais coder en dur l'adresse IP de chaque serveur dans une variable PHP dans un fichier de configuration que nous avons sur chaque serveur.
  2. Je pourrais utiliser la reverse proxy ajouter de l'avant du module pour Apache (mod_rpaf).
  3. Je suis susceptible de changer la proxy_pass sur chaque serveur pour aller à XXX.XXX.XXX.XXX:8880 et YYY.YYY.YYY.YYY:8880 plutôt que de localhost?

vous devriez vraiment avoir som serveur de configuration spécifique qui est chargé et un id de serveur à l'intérieur.chaque système va se comporter différemment et les adresses ip, nom d'hôte est vraiment très erreur vulnérables.généralement, il existe de nombreuses applications sur le serveur et d'un jour à l'autre, il ne pourrait pas travailler plus longtemps et vous aurez un moment difficile de débogage (par exemple some1 geths la belle idée de mettre en place un reverse entrée de sorte mails ne pas se faire spammer plus?)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top