3 Stimmen

Die PHP-Variable $_SERVER['SERVER_ADDR'] liefert immer 127.0.0.1

Wir haben mehrere Webserver mit Lastausgleich, auf denen dieselbe PHP-Webanwendung ( LAMP ) und ich möchte auf jedem Server etwas anderen Code laufen lassen ( für Testzwecke ). Ich hatte gehofft, die $_SERVER['SERVER_ADDR'] super global, um so etwas zu tun:

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

Leider funktioniert dies nicht, da beide Rechner die $_SERVER['SERVER_ADDR'] zu ' 127.0.0.1 '. Wie kann ich sie so konfigurieren, dass $_SERVER['SERVER_ADDR'] auf ihre öffentliche IP-Adresse eingestellt ist?

Ich vermute, dass das Problem etwas mit folgenden Faktoren zu tun hat /etc/hosts Zur Veranschaulichung sieht es derzeit wie folgt aus:

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

Update...

Hoppla ! Ich habe nicht bedacht, dass die nginx Reverse-Proxy vor den Webservern. Der gesamte Verkehr zu diesen Webservern kommt von nginx aufgrund der folgenden Zeile in der nginx conf:

location / {
    root                  /var/www/staging/current;
    proxy_pass            http://localhost:8880;
}

4voto

bobince Punkte 512550

Wahrscheinlich müsste man die Art und Weise ändern, wie sich der Load-Balancer mit dem Server verbindet. Ich weiß nicht, welche Software das ist.

Vielleicht ist es besser, wenn Sie aufgrund eines anderen Faktors wechseln, der sich zwischen den Geräten ändert. Ein guter Tipp wäre der Hostname:

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

4voto

Kieran Allen Punkte 961

Sicherlich ist es so einfach wie

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

2voto

Adam Lukaszczyk Punkte 4828

Zeilen in /etc/hosts umkehren

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

sollte funktionieren

1voto

金馆长 Punkte 207

Verwenden Sie diese genauer!

echo getHostByName($_SERVER[HTTP_HOST]);

0voto

Tom Punkte 13517

Um mein Problem zu lösen, habe ich 3 Ideen:

  1. Ich könnte die IP-Adresse jedes Servers in eine PHP-Variable in einer Konfigurationsdatei, die wir auf jedem Server haben, fest einprogrammieren.
  2. Ich könnte die Reverse-Proxy-Modul für Apache vorwärts hinzufügen ( mod_rpaf ).
  3. Vielleicht ändere ich die proxy_pass auf jedem Server, um zu XXX.XXX.XXX.XXX:8880 y YYY.YYY.YYY.YYY:8880 statt localhost ?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X