Dies ist die archivierte Version des Blogs vom 05.01.2017. Aktuelle Beiträge findest du unter thomas-leister.de
 

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

Post published on 13. März 2014 | Last updated on 17. Mai 2014
Tags:               

Diesen Blog unterstützen

Wenn Dir der Beitrag gefallen hat, freue ich mich über einen kleinen Obolus :-) Bitcoin QR Code

PayPal-Seite: https://www.paypal.me/ThomasLeister
Meine Bitcoin-Adresse: 15z8 QkNi dHsx q9WW d8nx W9XU hsdf Qe5B 4s

Siehe auch: Unterstützung

Informationen zum Autor

Thomas Leister

Geb. 1995, Kurzhaar-Metaller, Geek und Blogger. Nutzt seit Anfang 2013 ausschließlich Linux auf Desktop und Servern. Student der Automobilinformatik an der Hochschule für angewandte Wissenschaften in Landshut.

7 thoughts on “Mit Apache HTTP Proxy auf speziellen Port weiterleiten (z.B. auf Etherpad, Ghost, …)

  • 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

    • 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

    • 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“

Schreibe einen Kommentar

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