Benutzer-IP hinter Load Balancer erfassen (Apache/Linux)

Für Cloud Server mit Linux und Apache HTTP Server

Befindet sich der Apache hinter einem Load Balancer, wird die eigentliche IP des Benutzers durch die IP des Load Balancers überschrieben. Im Apache-Logfile steht somit nur noch die Adresse des Load Balancers. Wir zeigen Ihnen, wie Sie unter gewissen Voraussetzungen auch die originale Benutzer-IP mitprotokollieren können.

Für diesen Fall gibt es im HTTP-Protokoll den X-Forward-For-Header. Dieser Header dient dazu, die IP-Adresse des Benutzers zu übermitteln, wenn dieser durch einen Proxy oder Load Balancer auf einen Webserver zugreift. Da der Apache diesen Header standardmäßig aber nicht berücksichtigt, muss hier die Apache-Konfiguration angepasst werden.

Hinweis

Technisch bedingt funktioniert die "Load Balancer"-seitige Übermittlung der IP - und damit die hier beschriebene Lösung - nur bei unverschlüsselten Zugriffen. Erfolgt der Aufruf hingegen via HTTPS, so kann kein Header-Eintrag erfolgen, da die Kommunikation zwischen Client und Webserver vollständig verschlüsselt abläuft (es ist nicht möglich, ein eigenes SSL-Zertifikat auf dem Load Balancer zu installieren).

So passen Sie die Protokollierungseinstellung des Apache zur Berücksichtigung des X-Forward-For-Headers an:

  • Fügen Sie in der Apache-Konfigurationsdatei apache2.conf (CentOS: httpd.conf) eine LogFormat-Eintrag mit der Variable %{X-Forwarded-For}i hinzu.

    Ein Beispiel für eine LogFormat-Direktive (mit dem Namen "proxy"):

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\"" proxy
  • Fügen Sie für die für gewünschten Domains in den Konfigurationsdateien der entsprechenden Virtual Hosts einen CustomLog--Eintrag hinzu.

Im folgenden Beispiel wird der Apache angewiesen, die Aufrufe über domain-tld in der Datei access.log mit dem Logformat "proxy" zu protokollieren:

<VirtualHost domain.tld:80>
.
#CustomLog logs/access.log combined
CustomLog logs/access.log proxy
.
</VirtualHost>
  • Führen Sie einen Neustart des Apache-Dienstes durch, damit die Änderung wirksam wird.