Dies ist das Setup mit dem ich meine Webseite betreibe. Schlüsselkomponente ist hier ein Webserver mit öffentlicher IP. Der Titel ist also nicht 100%ig korrekt ;-)
Vorteil dieser Konfiguration ist, dass meine Daten lokal bei mir zu Hause liegen und man einfach einen kleinen/günstigen vServer mieten kann. Was und wie viele Server dann von zu Hause zugeschaltet werden (Bei mir nur ein Raspberry PI Zero W) bleibt einem selbst überlassen.
Topologie
|
+--------------------+--------------------+
| | |
| v |
| externer-server.de:80 |
| |
| +---------------^---------------+ |
| | Nginx | | |
| | | | |
| | | | |
| +---------------v---------------+ |
| |
| localhost:8888 |
| ^ |
| | |
+--------------------+--------------------+
|
| Reverse SSH Tunnel
|
+--------------+-------------+
| | |
| v |
| localhost:9999 |
| ^ |
| | |
| +------------+-----------+ |
| | Apache 2 | | |
| | v | |
| | | |
| +------------------------+ |
| |
+----------------------------+
Konfiguration (FreeBSD - Nginx)
Den öffentlichen Server betreibe ich mit FreeBSD. Die Konfiguration unter Linux sollte aber fast identisch laufen.
Im nginx Verzeichnis wo auch die nginx.conf
liegt, habe ich mir eine extra Datei angelegt.
/usr/local/etc/nginx/proxy-tunnel.conf
server {
server_name externer-server.de;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8888;
}
}
Die Datei kann man dann einfach in der nginx.conf
inkludieren.
Der include
kommt mit in den http Block der nginx.conf
.
http {
...
include proxy-tunnel.conf;
...
}
Konfiguration (Home Server)
Auf dem Raspberry Pi läuft ein Raspbian Lite. Den Reverse SSH Tunnel habe ich wie hier bereits beschrieben per systemd eingerichtet.
Reverse SSH Tunnel mit systemd
Den Apache 2 Server läuft in Docker. Das Portmapping muss dann von intern 80 auf 9999 extern gehen.