Einige Webanwendungen laufen nicht direkt über den Apache Webserver, sondern eröffnen neue Ports, über die sie von außen erreichbar sind – so z.B. Etherpad Lite unter Port 9001 und die Blogsoftware Ghost unter Port 2368. Das funktioniert zwar auch, allerdings muss man beim Aufruf der Seite im Browser immer den Port explizit angeben, sodass die Adresse z.B. lautet: trashserver.net:9001. Das ist unnötig kompliziert und nicht besonders benutzerfreundlich.
Besser ist es, für den jeweiligen Dienst einen neuen Apache VirtualHost mit einer darin definierten Domain oder Subdomains zu erstellen z.B. service1.trashserver.net und von dieser Adresse auf den Port des jeweiligen Zieldienstes weiterzuleiten. Der Benutzer wird später nie erfahren, auf welchem Port die eigentliche Software läuft und hat immer eine schöne Adresse vor Augen, die leicht zu merken ist.
Für eine HTTP Umleitung (diese schließt übrigens die Möglichkeit der Nutzung von HTTPS mit ein) müssen zwei Module des Apache Webservers aktiviert werden: mod_proxy und mod_proxy_http:
sudo a2enmod proxy sudo a2enmod proxy_http sudo service apache2 reload
Danach können die folgenden Direktiven in der Apache VirtualHost Konfiguration genutzt werden (Hier für das Etherpad auf Port 9001):
<VirtualHost *:80> ServerName pad.trashserver.net ProxyPreserveHost On ProxyRequests Off ProxyVia Off ProxyPass / http://127.0.0.1:9001/ ProxyPassReverse / http://127.0.0.1:9001/ </VirtualHost>
Anfragen an den VirtualHost werden direkt an die Adresse weitergegeben, die in ProxyPass und ProxyPassReverse angegeben ist.
In diesem Fall können HTTP Verbindungen (ohne Verschlüsselung) zum eigentlichen Server z.B. Etherpad ohne Bedenken genutzt werden – schließlich verweist der Webserver in dieser Konfiguration auf 127.0.0.1 – also sich selbst. Der Traffic bleibt innerhalb des Servers, sodass keine besonderen Sicherungsmaßnahmen ergriffen werden müssen. Nach außen hin werden die Verbindungen wie gewohnt mit dem Apache Webserver abgesichert, also mit einer entsprechenden SSL Konfiguration für einen VirtualHost, der auf Port 443 lauscht.
Zum Schluss muss Apache neu gestartet werden, damit die Konfiguration übernommen wird:
sudo service apache2 restart
Ich hab mithilfe deiner Anleitung auf meinem Ubuntu-Server sharelatex installiert und möchte jetzt auch von anderen Rechnern im lokalen Netzwerk darauf zugreifen können. In den Kommentaren hab ich gelesen, dass ich dafür das hier machen muss.
Hab dabei schon einiges probiert, es aber noch nicht geschafft. Wo genau muss ich diese Konfiguration (natürlich angepasst) eintragen? Ich kenne mich mit der Apache-Konifguration nämlich gar nicht aus…
Mathis
Hallo,
sehr schöne und gute Anleitung. Danke dafür, hat mir sehr geholfen. War einfacher als mit iptables auf Problem-Suche zu gehen. ;-)
Aber… ich habe ein Problem. Ich leite von meinem Internet-Server über einen speziellen Port über VPN auf meinen Heim-Server (http) um und es klappt soweit auch ganz gut. Nur, Bilder werden anscheinend nicht geladen. Er hängt da ewig herum und versucht diese zu laden.
Irgend eine Idee dazu? Vielleicht noch irgend was falsch konfiguriert? Die Konfiguration ist wie oben beschrieben, nur dass als Source eine IP und Port für den VirtualServer angegeben wurde.
Robert
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Hi, kürzlich habe ich bei einem anderen User erlebt, dass dieser sein WordPress-Blog auf einen anderen Server verschoben hat. Die Text-version des Blogs hat funktioniert, aber die Bilder wurden nicht geladen. In diesem Fall waren es fehlerhafte Bild-Adressen, die auf lokale IPs verwiesen haben. Die waren vom Internet aus natürlich nicht erreichbar. Vielleicht ist es bei dir ähnlich. Sieh am besten mal nach, von welcher IP-Adresse die Bilder geladen werden, und ob diese verfügbar ist.
Hallo Thomas, vielen Dank für dein Anleitungen.
Wie würde die Konfiguration bei eine SSL Verbindung funktionieren?
Ich möchte gern mit SSL aus dem Internet rein auf den HTTP Proxy und ohne SSL weiter auf mein Gerät.
Mein Konfiguration klappt leider nicht:
ServerName myhome.dyndns.org
ProxyPreserveHost On
ProxyRequests Off
ProxyVia Off
ProxyPass / http://192.168.1.10:80/
ProxyPassReverse / http://192.168.1.10:80/
SSLEngine on
SSLCertificateFile /media/certs/org.crt
SSLCertificateKeyFile /media/certs/org.key
SSLCertificateChainFile /media/certs/RootCA.crt
SSLCACertificatePath /media/certs/
SSLCACertificateFile /media/certs/RootCA.crt
Gruß
Eduard
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Hi Eduard, ich hatte schon lange nicht mehr mit Apache zu tun, aber ich denke, deine Config müsste so eigentlich funktionieren.
LG Thomas
Leider Nein. Wenn ich nach dem aktivieren des VH (a2ensite) am Apache2 reload oder restart mache bekomme ich folgende Meldung:
Job for apache2.service failed. See ’systemctl status apache2.service‘ and ‚journalctl -xn‘ for details.
systemctl status apache2.service:
apache2.service – LSB: Apache2 web server
Loaded: loaded (/etc/init.d/apache2)
Active: failed (Result: exit-code) since Thu 2016-06-30 08:43:23 CEST; 2min 6s ago
Process: 1641 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
Process: 1612 ExecReload=/etc/init.d/apache2 reload (code=exited, status=1/FAILURE)
Process: 1669 ExecStart=/etc/init.d/apache2 start (code=exited, status=1/FAILURE)
Komisch. Hab jetzt eine andere (interne) ZielAdresse eingetragen und schon klappts. Anscheinend funktioniert der HTTP Proxy nicht bei allen ZielAdressen. Hier die Konfig die zur Zeit funktioniert:
ServerName 192.168.1.42
ProxyPreserveHost On
ProxyRequests Off
ProxyVia Off
ProxyPass / http://192.168.1.11:80/
ProxyPassReverse / http://192.168.1.11:80/
SSLEngine On
SSLProxyEngine On
SSLCertificateFile /media/certs/org.crt
SSLCertificateKeyFile /media/certs/org.key
SSLCertificateChainFile /media/certs/RootCA.crt
SSLCACertificatePath /media/certs/
SSLCACertificateFile /media/certs/RootCA.crt
SSLProtocol All -SSLv2 -SSLv3
SSLCompression off
SSLHonorCipherOrder On
SSLCipherSuite „EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA“