AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
Wie erfasse ich Client-IP-Adressen in Webserverprotokollen mit Elastic Load Balancing?
Ich verwende Elastic Load Balancing (ELB) für meinen Webserver, und ich sehe die IP-Adresse meines Load Balancers in den Zugriffsprotokollen des Webservers. Ich möchte stattdessen Client-IP-Adressen erfassen.
Kurzbeschreibung
Deine Webserver-Zugriffsprotokolle erfassen die IP-Adresse deines Load Balancers, da der Load Balancer die Verbindung zu deinen Instances herstellt. Um die IP-Adressen von Clients in deinen Webserver-Zugriffsprotokollen zu erfassen, konfiguriere Folgendes:
-
Füge bei Application Load Balancers und Classic Load Balancers mit HTTP/HTTPS-Listeners den X-Forwarded-For HTTP-Header hinzu, um Client-IP-Adressen zu erfassen. Anschließend kannst du deine Webserver-Zugriffsprotokolle so konfigurieren, dass diese IP-Adressen aufgezeichnet werden.
Hinweis: In bestimmten Fällen kann der X-FORWARDED-FOR-Header fehlen oder leer sein. Zustandsprüfungsanfragen, die von Application Load Balancers, Classic Load Balancers und Network Load Balancers initiiert wurden, enthalten den X-FORWARDED-FOR-Header nicht. Außerdem hängen Network Load Balancers und Classic Load Balancers mit TCP/SSL-Listenern den X-FORWARDED-FOR-Header nicht an eingehende Anfragen an. Wähle für Application Load Balancers den Verarbeitungsmodus Append, um den X-FORWARDED-FOR-Header konsistent hinzuzufügen.
-
Konfiguriere für Classic Load Balancers mit TCP/SSL-Listeners die Unterstützung des Proxy-Protokolls auf dem Classic Load Balancer und der Zielanwendung.
-
Für Network Load Balancers registriere deine Ziele anhand der Instance-ID, um Client-IP-Adressen ohne zusätzliche Webserverkonfiguration zu erfassen. Eine Anleitung findest du unter Zielgruppenattribute.
-
Wenn du für Network Load Balancers nur IP-Adressen als Ziele registrieren kannst, aktiviere das Proxyprotokoll Version 2 auf dem Load Balancer. Anweisungen findest du unter Proxy-Protokoll.
Lösung
Application Load Balancers und Classic Load Balancers mit HTTP/HTTPS-Listeners (Apache)
Gehe wie folgt vor, um den X-Forwarded-For-HTTP-Header hinzuzufügen und deine Webserver-Zugriffsprotokolle zu konfigurieren:
-
Öffne deine Apache-Konfigurationsdatei mit einem Texteditor. Der Speicherort variiert je nach Konfiguration, z. B. /etc/httpd/conf/httpd.conf für Amazon Linux und RHEL, oder /etc/apache2/apache2.conf für Ubuntu.
-
Füge im Abschnitt LogFormat die Option %{X-Forwarded-For}i hinzu, wie das folgende Beispiel zeigt:
... LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common ... -
Speichere deine Änderungen.
-
Lade den Apache-Dienst neu. Führe je nach System einen der folgenden Befehle aus:
Sysvinit, Debian-basierte Systeme (wie Ubuntu) und SUSE (wie SLES11)
# /etc/init.d/apache2 reloadSysvinit, RPM-basierte Systeme (wie RHEL 6 und Amazon Linux), außer SUSE
# /etc/init.d/httpd reloadSystemd, Debian-basierte Systeme (wie Ubuntu) und SUSE (wie SLES12)
# systemctl reload apache2RPM-basierte Systeme (wie RHEL 7 und Amazon Linux 2), außer SUSE
# systemctl reload httpd -
Öffne die Zugriffsprotokolle deines Apache Webservers. Der Standort ist je nach Konfiguration unterschiedlich.
-
Stelle sicher, dass die Client-IP-Adressen jetzt im X-Forwarded-For-Header aufgezeichnet werden.
Application Load Balancers und Classic Load Balancers mit HTTP/HTTPS-Listeners (NGINX)
Gehe wie folgt vor, um den X-Forwarded-For-HTTP-Header hinzuzufügen und deine Webserver-Zugriffsprotokolle zu konfigurieren:
-
Öffne deine NGINX-Konfigurationsdatei mit einem Texteditor. Der Speicherort ist normalerweise /etc/nginx/nginx.conf.
-
Füge im Abschnitt LogFormat die Option $http_x_forwarded_for hinzu, wie das folgende Beispiel zeigt:
http { ... log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; ... } -
Speichere deine Änderungen.
-
Lade den NGINX-Dienst neu. Führe für Amazon Linux 2 oder RHEL den folgenden Befehl aus:
systemctl reload nginx**Hinweis:**Der Befehl zum Neuladen des NGINX-Dienstes ist auf anderen Systemen anders. Die Befehle zum Neuladen von NGINX ähneln den Befehlen zum Neuladen des Apache-Dienstes im vorherigen Abschnitt.
-
Öffne die Zugriffsprotokolle deines NGINX-Webservers. Der Standort ist je nach Konfiguration unterschiedlich.
-
Stelle sicher, dass die Client-IP-Adressen jetzt im X-Forwarded-For-Header aufgezeichnet werden.
Classic Load Balancers mit TCP/SSL-Listeners (Apache)
Gehe wie folgt vor, um die Unterstützung des Proxy-Protokolls zu konfigurieren:
-
Öffne deine Apache-Konfigurationsdatei mit einem Texteditor. Der Speicherort variiert je nach Konfiguration, z. B. /etc/httpd/conf/httpd.conf für Amazon Linux und RHEL, oder /etc/apache2/apache2.conf für Ubuntu.
-
Stelle sicher, dass deine Apache-Konfiguration das Modul mod_remoteip lädt (verfügbar für Apache Version 2.4.31 und höher). Weitere Informationen findest du unter Apache Module mod_remoteip auf der Apache-Website. Dieses Modul enthält die RemoteIPProxyProtocol-Direktive. Weitere Informationen findest du unter RemoteIPProxyProtocol-Direktive auf der Apache-Website. Suche in deiner Konfigurationsdatei nach einer Zeile, die der folgenden ähnelt:
Amazon Linux oder RHEL
LoadModule remoteip_module modules/mod_remoteip.soUbuntu
LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so -
Um zu bestätigen, dass das Modul mod_remoteip geladen wird, führe den folgenden Befehl aus:
$ sudo apachectl -t -D DUMP_MODULES | grep -i remoteip -
Überprüfe die Ausgabe und stelle sicher, dass die Ausgabe eine Zeile enthält, die der folgenden ähnelt:
remoteip_module (shared)Wichtig: Wenn die Ausgabe diese Zeile nicht enthält, ist das Modul nicht in deiner Konfiguration enthalten oder geladen. Stelle sicher, dass du das Modul aktivierst, bevor du fortfährst.
-
Füge deiner Apache-Konfigurationsdatei die folgende Zeile hinzu, um die Unterstützung des Proxy-Protokolls zu aktivieren:
RemoteIPProxyProtocol On -
Bearbeite den Abschnitt LogFormat der Konfigurationsdatei, um die Remote-IP-Adresse (%a) und den Remote-Port (%{remote}p:) zu erfassen:
LogFormat "%h %p %a %{remote}p %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined -
Speichere deine Änderungen.
-
Lade den Apache-Dienst neu. Führe je nach System einen der folgenden Befehle aus:
Sysvinit, Debian-basierte Systeme (wie Ubuntu) und SUSE (wie SLES11)
# /etc/init.d/apache2 reloadSysvinit, RPM-basierte Systeme (wie RHEL 6 und Amazon Linux), außer SUSE
# /etc/init.d/httpd reloadSystemd, Debian-basierte Systeme (wie Ubuntu) und SUSE (wie SLES12)
# systemctl reload apache2Systemd, RPM-basierte Systeme (wie RHEL 7 und Amazon Linux 2), außer SUSE
# systemctl reload httpd -
Öffne die Zugriffsprotokolle des Apache Webservers. Der Standort ist je nach Konfiguration unterschiedlich.
-
Stelle sicher, dass die Client-IP-Adressen jetzt im Proxy-Protokoll-Header aufgezeichnet werden.
-
Aktiviere die Unterstützung für das Proxy-Protokoll in deiner Zielanwendung.
Classic Load Balancers mit TCP/SSL-Listeners (NGINX)
Gehe wie folgt vor, um die Unterstützung des Proxy-Protokolls zu konfigurieren:
-
Öffne die NGINX-Konfigurationsdatei mit einem Texteditor. Der Speicherort ist normalerweise /etc/nginx/nginx.conf.
-
Aktualisiere die Zeile listen des Abschnitts server auf proxy_protocol. Aktualisiere die Zeile log_format des Abschnitts http, um die proxy_protocol_addr festzulegen:
http { ... log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$proxy_protocol_addr"'; access_log /var/log/nginx/access.log main; ... } server { ... listen 80 default_server proxy_protocol; ... } ... } -
Speichere deine Änderungen.
-
Lade den NGINX-Dienst neu. Führe für Amazon Linux 2 oder RHEL den folgenden Befehl aus:
systemctl reload nginx**Hinweis:**Der Befehl zum Neuladen des NGINX-Dienstes ist auf anderen Systemen anders. Die Befehle zum Neuladen von NGINX ähneln den Befehlen zum Neuladen des Apache-Dienstes im vorherigen Abschnitt.
-
Öffne die Zugriffsprotokolle des NGINX-Webservers. Der Standort ist je nach Konfiguration unterschiedlich.
-
Stelle sicher, dass die Client-IP-Adressen jetzt im Proxy-Protokoll-Header aufgezeichnet werden.
-
Aktiviere die Unterstützung für das Proxy-Protokoll in deiner Zielanwendung.
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor einem Jahr
AWS OFFICIALAktualisiert vor 4 Jahren