Für Cloud Server mit Linux und Apache HTTP Server

In diesem Artikel wird erklärt, wie Sie die originale Benutzer-IP hinter einem Load Balancer erfassen können, indem Sie den X-Forwarded-For-Header in der Apache-Konfiguration unter Linux berücksichtigen.

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) einen 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 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.