Forward IP Adress nginx Proxy. Wie X-Forwarded-For aktivieren? Sie haben einen Apache oder nginx Web Server hinter einem Reverse Proxy und nun wird aber immer die IP des Proxys anstelle von der Public IP des Clients im Apache Access log angezeigt. In diesem Tutorial wird Ihnen Schritt für Schritt erklärt wie Forward IP Adress nginx Proxy funktioniert.
Das Problem der illustrierten Konfiguration ist, dass der Webhost selber nur die IP des Proxy Servers bekommt. Hierzu muss man Forward IP Adress nginx Proxy aktivieren.
Falls sie gratis mit Lets Encrypt ein Zertifikat erstellen möchten gibt es hier ein Tutorial dazu.
1. X-Forwarded-For auf dem Reverse Proxy aktivieren
Falls X-Forwarded-For nicht auf dem Reverse Proxy Server aktiviert ist müssen Sie das aktivieren bevor die Konfiguration des Webservers erfolgt.
1.1. Forward IP Adress nginx Proxy – Reverse Proxy Konfiguration
Bearbeiten Sie die Config Datei Ihrer Webseite. (Der Name Ihrer Config Datei weicht ab.)
nano /etc/nginx/rproxy/http/available/technium.ch.conf
Überprüfen Sie, dass die folgenden 3 proxy_set_header in der Config Datei existieren.
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Forward IP Adress nginx Proxy Beispielkonfiguration einer Webseite (welche auf einem separaten Webserver liegt).
server { server_name technium.ch; set $upstream 192.168.11.20; location / { proxy_pass_header Authorization; proxy_pass https://$upstream; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_buffering off; client_max_body_size 0; proxy_read_timeout 10000s; proxy_redirect off; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/technium.ch/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/technium.ch/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = technium.ch) { return 301 https://$host$request_uri; } # managed by Certbot server_name technium.ch; listen 80; return 404; # managed by Certbot }
1.2 Ngingx config testen und neu starten
nginx -t
Wenn der obige Befehl keine Fehler ausgibt können Sie nun nginx neu starten.
service nginx restart
2. Folgende Schritte müssen auf dem Apache2 Webhost hinter dem Reverse Proxy ausgeführt werden
2.1. Remoteip Modul Apache für X-Forwarded-For aktivieren
a2enmod remoteip
2.2. Apache Configuration anpassen
Unter Debian können Sie folgenden Befehl verwenden um die Konfiguration anzupassen. Bei anderen Distributionen kann das apache2.conf File auch in /etc/httpd/conf oder /usr/local/apache2/conf liegen.
nano /etc/apache2/apache2.conf
Suchen Sie nach der folgenden Zeile und entfernen Sie den # am Anfang der Zeile. Falls die Zeile nicht existiert können Sie die Zeile hinzufügen.
#LoadModule remoteip_module modules/mod_remoteip.so
Schlussendlich sollte es wie folgt aussehen:
LoadModule remoteip_module modules/mod_remoteip.so
Speichern Sie die Konfigurationsdatei.
2.3. Proxy Server definieren
Nun müssen Sie dem Apache2 Webserver mitteilen, welche IP-Adresse dem Proxyserver gehört.
nano /etc/apache2/conf-available/remoteip.conf
Fügen Sie Folgendes ein und ersetzen Sie die IP-Adresse mit der IP Ihres Proxy Servers. Falls Sie mehrere Proxy Server haben können Sie einfach mehrere IP-Adressen hintereinander angeben.
RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy 192.168.11.13
Beachten Sie, dass wenn der Client über eine IP im internen Netzwerk verfügt dies so nicht funktioniert. Um auch interne IP-Adressen zu akzeptieren, fügen Sie anstelle der obigen Konfiguration folgendes ein. (Auch bei dieser Konfiguration müssen Sie die IP-Adresse anpassen.
RemoteIPHeader X-Forwarded-For RemoteIPInternalProxy 192.168.11.13
Nun aktivieren Sie die remoteip Config.
a2enconf remoteip.conf
2.4. Apache Log Format konfigurieren
nano /etc/apache2/apache2.conf
Suchen Sie in der Apache2 Config nach folgender Zeile.
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combined
Ändern Sie diese wie folgt ab.
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
Nun haben Sie sozusagen %h mit %a ersetzt. Dies stellt sicher, dass die richtige IP-Adresse im Log angezeigt wird.
Wichtig: Jenachdem weicht Ihre LogFormat Zeile von der obigen ab. Wenn dies der Fall ist, können Sie einfach die %h mit %a ersetzen. Möglicherweise haben Sie mehrere LogFormat Zeilen, dann ersetzen Sie alle %h mit %a.
2.5. Apache Config testen und neu starten
apache2ctl configtest
Wenn der obige Befehl keine Fehler ausgibt können Sie nun Apache2 neu starten.
service apache2 restart
3. Folgende Schritte müssen auf dem nginx Webhost hinter dem Reverse Proxy ausgeführt werden:
3.1. Überprüfen ob ngx_http_realip_module geladen wurde
nginx -V 2>&1 | egrep --color -o 'http_realip_module' nginx -V 2>&1 | egrep --color -o 'realip_module'
Die Ausgabe der beiden Befehle sollte http_realip_module und realip_module sein.
Falls das Modul nicht aktiv ist, wird es mit –with-http_realip_module aktiviert.
3.2. Header aktivieren und Proxy IP einstellen
Fügen Sie folgende Konfiguration in die Config Datei Ihrer Webseite in den Server block ein. Geben Sie die entsprechende IP-Adresse Ihres Reverse Proxy Servers an
set_real_ip_from 192.168.11.13;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
Auch möglich wäre eine IPv6 Adresse oder CIDR wie in folgendem Beispiel.
set_real_ip_from 2606:4700:10::6816:ad6; set_real_ip_from 192.168.255.0/24;
Beispiel eines Konfigurationspfades.
nano /etc/nginx/sites-available/cdn.ramhee.ch.conf
Nginx Webserver Beispielkonfiguration einer Webseite auf separaten Webserver.
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html/cdn.ramhee.ch/; # Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html; server_name _; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } set_real_ip_from 192.168.11.13; real_ip_header X-Forwarded-For; real_ip_recursive on; }
3.3. Nginx Config testen und neu starten
nginx -t
Wenn der obige Befehl keine Fehler ausgibt können Sie nun nginx neu starten.
service nginx restart
Nun ist die Forward IP Adress nginx Proxy Konfiguration abgeschlossen.
Schreib einen Kommentar