Debian Apache Virtualhost und Proxy

Aus Wiki
Zur Navigation springen Zur Suche springen

Allgemeines

Im Folgenden wird erklärt, wie mit Hilfe von Virtualhosts mehrere Websites z.B. www.domain.org, wiki.domain.org, ox.domain.org als Subdomains einer Domain domain.org gehosted werden kann.

Mit dem sog. Apache Reverse Proxy in Verbindung mit einem Virtualhost können andere Websites oder Geräte virtuell eingebunden werden. So ist es z.B. möglich, den Webserver eines Solarloggers, die Webseite der AVR-Steckdosenleiste, oder die Konfigurationsseite der Fritzbox als Subdomain - z.B. http://solarlog.domain.org zu erreichen. Für einen Surfer aus dem Internet sieht es so aus, als ob die Solarlog-Seiten virtuell auf dem "normalen" Apache Server liegen.


Anlegen eines Virtualhost

Die Virtualhost-Definitionen liegen im Verzeichnis /etc/apache2/sites-enabled. Der Filename der Virtualhost-Definition kann beliebig gewählt werden. Es ist auch möglich, mehrere Virtualhosts in einer Datei abzulegen. Allerdings empfiehlt es sich der Übersichtlichkeit halber nur einen Virtualhost pro File abzulegen und aussagekräftige Filenamen zu verwenden. Der Filename muss die Dateiendung .conf haben, damit das File von Apache2 verwendet wird.

Grundsätzlicher Aufbau einer Virtualhost Definition:

<VirtualHost *:Port>
  DocumentRoot /Pfad
  ServerName subdomain.domain.org
  ...
</VirtualHost>

Port: Port für den der Virtualhost gelten soll. Normalerweise: 80 für HTTP und 443 für HTTPS. Pfad: Pfad unter dem die Webseite im Linux Dateisystem erreichbar ist. subdomain.domain.org: Subdomain (beliebig wählbar) und domain, unter der der Virtualhost erreichbar sein soll. Z.B. wiki.domain.org. Für HTTPS sind weitere Angaben bzgl. SSL-Zertifikat und -Key erforderlich. Details siehe HTTPS-Abschnitt. Es sind zahlreiche weitere Statements (z.B. <Directory> und <Location>) möglich, die im Rahmen dieser Anleitung nicht näher erläutert werden können.


HTTP

Ein einfacher Virtualhost für HTTP (Wiki_http.conf) hat z.B. folgenden Aufbau:

<VirtualHost *:80>
  DocumentRoot /var/lib/mediawiki
  ServerName wiki.domain.org
</VirtualHost>

Nach Änderungen an den Virtualhost-Definitionen muss Apache2 neu gestartet werden, damit die Änderung übernommen wird:

/etc/init.d/apache2 restart

HTTPS

Für HTTPS sind weitere Statements hinschtlich SSL erforderlich. Z.B. obiges Beispiel für https (wiki_https.conf):

<VirtualHost *:443>
  DocumentRoot /var/lib/mediawiki
  ServerName wiki.domain.org
  SSLKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
  SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
  SSLEngine on
</VirtualHost>

Nach Änderungen an den Virtualhost-Definitionen muss Apache2 neu gestartet werden, damit die Änderung übernommen wird:

/etc/init.d/apache2 restart

Reverse Proxy

Mit einem Reverse Proxy können andere Websites, die auch auf ganz anderen Servern/Geräten liegen in einen Virtualhost verpackt werden, sodass für einen Surfer überhaupt nicht erkennbar ist, dass die Zielseite evtl. auf einem ganz anderen Gerät liegt. Im Gegensatz zu einem Forward Proxy, der im Webbrowser konfiguriert werden muss, wird die komplette Konfiguration des Reverse Proxy komplett auf dem Server vorgenommen.

Als Beispiel soll hier ein Solarlogger mit der internen IP-Adresse 192.168.0.222 (Port 80) unter http://solarlog.domain.org erreichbar sein.

vi /etc/apache2/sites-enabled/solarlog_http.conf

Folgende Zeilen definieren einen Virtualhost, der als reverse Proxy fungiert:

<VirtualHost *:80>
   ServerName solarlog.schiele.homelinux.org
   ProxyRequests Off
   <Proxy *>
      Order allow,deny
      Allow from all
   </Proxy>
   <Location />
      ProxyPass        http://192.168.0.222:80/
      ProxyPassReverse http://192.168.0.222:80/ 
      ProxyHTMLURLMap  http://192.168.0.222:80/
   </Location>
</VirtualHost>

Nach Änderungen an den Virtualhost-Definitionen muss Apache2 neu gestartet werden, damit die Änderung übernommen wird:

/etc/init.d/apache2 restart


Warning.png Achtung:
Es muss unbedingt das Statement "ProxyRequests Off" vorhanden sein, da ansonsten der Server als offener Proxy von überall ("Allow from all") im Internet verwendet werden könnte (Forwarding Proxy). Nachdem hier kein Forwarding Proxy, der nur lokal freigegeben werden sollte, sondern ein Reverse Proxy eingerichtet werden soll, der von überall im Internet erreichbar sein muss, ist dieses Statement hier essenziell


Mit Hilfe eines Reverse Proxies ist es sogar möglich, einen Webserver, der nur HTTP beherrscht, hinter einem SSL-fähigen Apache2 zu betreiben. Die Übertragung der Webseite zwischen Webbrowser und Apache2 (Reverse Prox) ist dann per SSL-Verschlüsselung gesichert. Der Weg zwischen Apache2 und Zielserver erfolgt dann per HTTP, was aber kein Problem darstellen sollte, wenn sich der Zielserver im selben LAN befindet.

Obiges Beispiel mit SSL-Verschlüsselung: vi /etc/apache2/sites-enabled/solarlog_http.conf Folgende Zeilen definieren einen Virtualhost, der als reverse Proxy fungiert:

<VirtualHost *:80>
   ServerName solarlog.schiele.homelinux.org
   ProxyRequests Off
   <Proxy *>
      Order allow,deny
      Allow from all
   </Proxy>
   <Location />
      ProxyPass        http://192.168.0.222:80/
      ProxyPassReverse http://192.168.0.222:80/ 
   </Location>
   SSLEngine on
   SSLProxyEngine On
   SSLKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
   SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
</VirtualHost>