Frage

Wir haben mehrere Webserver mit Lastausgleich, auf denen dieselbe PHP-Webanwendung ausgeführt wird (LAMPE) und ich möchte auf jedem Server leicht unterschiedlichen Code ausführen (zu Testzwecken).Ich hatte gehofft, das zu nutzen $_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";
}

Dies funktioniert leider nicht, da beide Maschinen eingestellt sind $_SERVER['SERVER_ADDR'] Zu '127.0.0.1'.Wie kann ich sie so konfigurieren? $_SERVER['SERVER_ADDR'] ist auf ihre öffentliche IP-Adresse eingestellt?

Ich vermute, das Problem könnte etwas damit zu tun haben /etc/hosts Zur Veranschaulichung sieht es derzeit also so aus:

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

Aktualisieren...

Hoppla!Ich habe es versäumt, darüber nachzudenken Nginx Reverse-Proxy vor den Webservern.Der gesamte Datenverkehr zu diesen Webservern kommt von Nginx aufgrund der folgenden Zeile in der Nginx-Konfiguration:

location / {
    root                  /var/www/staging/current;
    proxy_pass            http://localhost:8880;
}
War es hilfreich?

Lösung

Sicherlich ist es so einfach wie

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

Andere Tipps

Dazu müsste wahrscheinlich geändert werden, wie der Load-Balancer eine Verbindung zum Server herstellt.Ich weiß nicht, um welche Software es sich handelt.

Möglicherweise ist der Wechsel aufgrund eines anderen Faktors, der sich zwischen den Maschinen ändert, besser dran.Eine gute Wahl 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);
}

Zeilen in /etc/hosts umkehren

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

sollte arbeiten

Verwenden Sie dies genauer!

echo getHostByName($_SERVER[HTTP_HOST]);

Um mein Problem zu beheben, habe ich drei Ideen:

  1. Ich könnte die IP-Adresse jedes Servers fest in eine PHP-Variable in einer Konfigurationsdatei codieren, die wir auf jedem Server haben.
  2. Ich könnte das verwenden Reverse-Proxy fügt Forward-Modul für Apache hinzu (mod_rpaf).
  3. Ich könnte das ändern proxy_pass auf jedem Server, zu dem man gehen soll XXX.XXX.XXX.XXX:8880 Und YYY.YYY.YYY.YYY:8880 statt localhost?

Sie sollten wirklich eine serverspezifische Konfiguration haben, die geladen wird, und eine Server-ID enthalten.Jedes System verhält sich anders und die Suche nach IP-Adressen und Hostnamen ist definitiv sehr fehleranfällig.Normalerweise befinden sich viele Anwendungen auf dem Server und von einem Tag auf den anderen kann es sein, dass es nicht mehr funktioniert und Sie Probleme beim Debuggen haben (z. B. hat jemand die nette Idee, einen Rückwärtseintrag einzurichten, damit E-Mails nicht mehr als Spam landen?) )

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top