Wie man eine echte IP über Cloudflare erhält – Nginx Reverse Proxy – Docker
Einführung
Wenn Sie Cloudflare als CDN- und DDoS-Schutzdienst verwenden, fungiert es als Vermittler zwischen Ihrer Website und ihren Besuchern. Das bedeutet, dass die für Ihren Webserver sichtbare IP-Adresse standardmäßig die von Cloudflare ist, nicht die des ursprünglichen Besuchers. Dies kann zu Problemen bei der Protokollierung, der Analyse und den auf IP-Adressen basierenden Sicherheitsrichtlinien führen. In diesem Artikel gehen wir die Schritte durch, die notwendig sind, um Ihren Nginx-Server so zu konfigurieren, dass er die echten IP-Adressen der Besucher richtig protokolliert und verwendet, wenn Sie Cloudflare verwenden, selbst in einer Docker-Umgebung.
Das Problem verstehen

Wenn sich ein Besucher über Cloudflare mit Ihrer Website verbindet, wird die ursprüngliche IP-Adresse durch die eigene IP von Cloudflare maskiert. Dies hilft, Ihren Server vor direkten Angriffen zu schützen, erschwert aber die Identifizierung der wahren Besucher-IP. Um dieses Problem zu lösen, fügt Cloudflare Header wie X-Forwarded-For
und CF-Connecting-IP
ein, die die Original-IP des Clients enthalten. Nginx verwendet diese Header standardmäßig nicht, so dass eine zusätzliche Konfiguration erforderlich ist.
Voraussetzungen
Vergewissern Sie sich vor dem Start, dass Sie alles haben:
- Auf einem Nginx-Server, auf dem das Modul
ngx_http_realip_module
aktiviert ist. Dieses Modul ist erforderlich, um die realen IP-Header korrekt zu behandeln. - Ein grundlegendes Verständnis der Nginx-Konfiguration und von Docker.
- Zugang zu den Konfigurationsdateien Ihres Servers.
Schritt 1: Nginx für die Verwendung von echten IP-Headern konfigurieren
Damit Nginx die echte IP aus den von Cloudflare bereitgestellten Headern erkennt, müssen Sie die Konfiguration ändern. Stellen Sie zunächst sicher, dass das Modul ngx_http_realip_module
installiert ist. Dieses Modul ist normalerweise in den meisten Nginx-Installationen standardmäßig enthalten.
Als nächstes erstellen Sie eine Datei namens Cloudflare
im Verzeichnis /etc/nginx/
mit folgendem Inhalt:
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
...
real_ip_header CF-Verbindungs-IP;
Diese Datei listet alle Cloudflare-IP-Bereiche auf und weist Nginx an, diesen IPs zu vertrauen und den CF-Connecting-IP-Header für die echte IP zu verwenden. Für zukünftige Updates ist es wichtig, die IP-Bereiche von Cloudflare regelmäßig zu überprüfen, da sie sich im Laufe der Zeit ändern können.
Schritt 2: Einbindung der Cloudflare-Konfiguration in Nginx
Bearbeiten Sie die Hauptkonfigurationsdatei von Nginx, die sich normalerweise unter /etc/nginx/nginx.conf
befindet. Fügen Sie im Abschnitt http {}
die neu erstellte Cloudflare-Konfigurationsdatei ein:
http {
include /etc/nginx/cloudflare;
...
}
Dadurch wird sichergestellt, dass die reale IP-Konfiguration global auf alle Ihre Serverblöcke angewendet wird.
Schritt 3: Aufzeichnung echter IP-Adressen
Um die ursprüngliche Besucher-IP in Ihre Logs aufzunehmen, ändern Sie die log_format-Direktive in Ihrer nginx.conf
, um die Variablen $http_cf_connecting_ip
und $http_x_forwarded_for
zu verwenden. Zum Beispiel:
log_format main '$remote_addr - $http_cf_connecting_ip [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
So können Sie sowohl die Cloudflare-IP als auch die ursprüngliche Besucher-IP in Ihren Protokollen sehen.
Schritt 4: Übernahme der Änderungen
Um die Änderungen anzuwenden, testen Sie die Nginx-Konfiguration:
- Für CentOS/RHEL:
nginx -t
- Für Ubuntu:
service nginx restart
Schritt 5: Überprüfen der Konfiguration
Überprüfen Sie Ihre Website und die Nginx-Zugangs- und Fehlerprotokolle (z. B. /var/log/nginx/access.log
), um sicherzustellen, dass die echten Besucher-IPs korrekt protokolliert werden. Dieser Schritt ist wichtig, um sicherzustellen, dass Ihre Konfiguration wie erwartet funktioniert.
Optional: Handhabung von Real IP in einer Docker-Umgebung
Wenn Ihre Webanwendung in einem Docker-Container läuft, müssen Sie die echte IP an die containerisierte Anwendung übergeben. Fügen Sie die folgende Zeile in Ihre Nginx-Konfiguration ein, direkt nach der fastcgi_pass
Direktive:
fastcgi_param REMOTE_ADDR $http_x_real_ip;
Dies setzt die Variable $_SERVER['REMOTE_ADDR']
in PHP-basierten Anwendungen auf die ursprüngliche IP.
Allgemeine Probleme und Fehlerbehebung
- Falsche IP in den Protokollen: Überprüfen Sie, ob die Cloudflare-IP-Bereiche aktuell sind und ob die
real_ip_header
Direktive korrekt gesetzt ist. - Nginx-Konfigurationsfehler: Verwenden Sie
nginx -t
, um vor dem Neustart von Nginx auf Syntaxfehler in den Konfigurationsdateien zu prüfen. - Docker-Netzwerk-Probleme: Stellen Sie sicher, dass der Netzwerkmodus von Docker eine korrekte IP-Weiterleitung ermöglicht.
Schlussfolgerung
Wenn Sie die in diesem Artikel beschriebenen Schritte befolgen, können Sie sicherstellen, dass Ihr Nginx-Server, auch wenn er innerhalb von Docker läuft, die von Cloudflare bereitgestellten ursprünglichen IP-Adressen der Besucher korrekt protokolliert und verwendet. Dies ist für eine genaue Protokollierung, Sicherheitskonfigurationen und Analysen unerlässlich. Mit der richtigen Konfiguration können Sie die Vorteile des Schutzes von Cloudflare nutzen, ohne die Sichtbarkeit von echten Benutzerdaten zu opfern.