Forward IP Adress nginx Proxy – X-Forwarded-For – Tutorial

Forward IP Adress nginx Proxy

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.

Forward IP Adress nginx Proxy reverse proxy
Forward IP Adress nginx Proxy

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

Forward IP Adress nginx Proxy apache2
Forward IP Adress nginx Proxy

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:

Forward IP Adress nginx Proxy nginx
Forward IP Adress nginx Proxy

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.

Über ramhee 262 Artikel
Mein Name ist Ramon Heeb und das ist mein Technikmagazin. Ich liebe es Tutorials, Reviews und anderes zu schreiben und so anderen Menschen zu helfen. Ich bin seit einigen Jahren Technik-interessiert und habe technium.ch im Jahre 2019 gegründet.

Kommentar hinterlassen

Schreib einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht.


*