Problembeschreibung
Ein Serversystem mit öffentlicher IP (200.200.200.200) virtualisiert mehrere Gast(Server)systeme welche HTTP, MAIL, SVN(SSH) usw. bereitstellen. Als Virtualisierungslösung verwenden wir kvm mit libvirt. Als Netzwerkmodus wird "nat" verwendet, da die Gäste keine öffentlichen Adressen bekommen sollen. Die Standardkonfiguration lässt in diesen Modus die Kommunikation des Gasts nach aussen hin zu (MASQUERADING), schirmt diesen jedoch beim Zugriff auf ihn selbst ab.Wir haben auf den Gastsystem (192.168.100.10, 192.168.100.11) bereits HTTP Server (lighttp, apache) eingerichtet. Diese warten auf Port 80 auf eingehende Anfragen. Die Webserver sollen über www.mindfab.net (192.168.100.10) und über cms.mindfab.net (192.168.100.11) erreichbar sein. Dieses Problem lässt sich mit einfachen Portforwarding nicht lösen, da wir in Abhängigkeit von dem Servernamen (www.mindfab.net oder cms.mindfab.net) auf unterschiedliche IP-Adressen (http Server) zugreifen. Als Lösung dieses Problems bietet sich nginx, ein open source web Server und reverse proxy Server an.
Lösungsansatz
Als erstes sollten wir sicherstellen das unsere HTTP Server auf den Gästen ordnungsgemäss funktionieren und über die entsprechenden IP Adressen erreichbar sind. Dies kann man bspw. mit lynx überprüfen. Von unseren Host System aus überprüfen wir also folgendes...lynx http://192.168.100.10Bei beiden Kommandos sollte die "default" Webseite erscheinen.
lynx http://192.168.100.11
Als nächstes installieren wir nginx auf unseren Host...
apt-get install nginxund beginnen mit der entsprechenden Konfiguration.
vim /etc/nginx/conf.d/default.confNun starten wir den Daemon neu und testen anschliessend den Reverse Proxy.
## 192.168.100.10 -> www.mindfab.net ## upstream wwwmindfabnet { server 192.168.100.10:80; } ## 192.168.100.11 -> cms.mindfab.net ## upstream cmsmindfabnet { server 192.168.100.11:80; } ## Start www.mindfab.net ## server { listen 200.200.200.200:80; server_name www.mindfab.net; access_log /var/log/nginx/www.mindfab.net.access.log; error_log /var/log/nginx/www.mindfab.net.error.log; root /usr/share/nginx/www; index index.html index.htm; ## send request back to www.mindfab.net ## location / { proxy_pass http://wwwmindfabnet; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ## End www.mindfab.net ## ## START cms.mindfab.net ## server { listen 200.200.200.200:80; server_name cms.mindfab.net; access_log /var/log/nginx/cms.mindfab.net.access.log; error_log /var/log/nginx/cms.mindfab.net.error.log; root /usr/local/nginx/www; index index.html; location / { proxy_pass http://cmsmindfabnet; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_buffering off; proxy_set_header Host cms.mindfab.net; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ## END cms.mindfab.net ##
service nginx restartAnmerkung: Selbstverständlich müssen wir sicherstellen das www.mindfab.net und cms.mindfab.net beide auf die IP Adresse 200.200.200.200 auflösen. Dies können wir durch eine entsprechende Konfiguration unseres DNS Servers erreichen. Für Testzwecke kann man aber auch zwei Einträge in seine /etc/hosts Datei anlegen.
lynx http://www.mindfab.net # sollte uns den Inhalt des Webservers auf 192.168.100.10 anzeigen
lynx http://cms.mindfab.net # sollte uns den Inhalt des Webservers auf 192.168.100.11 anzeigen
Im 2.Teil werden wir unseren Reverse Proxy um SSL erweitern.
Referenzen:
- http://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html
Keine Kommentare:
Kommentar veröffentlichen