kostenloser Webspace werbefrei: lima-city


Apache2 VirtualHosts Http-Proxy

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    vampiresilence

    Kostenloser Webspace von vampiresilence

    vampiresilence hat kostenlosen Webspace.

    Hallo mal wieder :wave:

    Ich sitze da gerade an einer - für mich - schwierigen Sachen und zwar möchte ich einen Apache2-Server so konfigurieren, dass alle Requests auf eine bestimmte Subdomain, auf einen anderen Apache2-Server umgeleitet werden.

    Ich habe diese Beispielsammlung gefunden:
    https://httpd.apache.org/docs/2.4/vhosts/examples.html

    Und ich denke das Beispiel mit dem mod_proxy ist das richtige Werkzeug für das was ich erreichen möchte, aber ich habe noch schwierigkeiten das komplett zu verstehen, da der Spezialfall mit der Subdomain noch nicht konkret abgedeckt wird. Also zu den Details:

    Ich habe 2 Server, nennen wir sie Server1 mit IP 1.1.1.1 und DNS-Eintrag, der von Server1.de auf 1.1.1.1 zeigt.
    Und ich habe Server2 mit IP 2.2.2.2, der keinen DNS-Eintrag hat und auch nicht haben soll, da er nur dazu dient einen Teil der Website auszulagern.

    Ich möchte erreichen, dass beim Aufruf von *.Server1.de, alles bis auf eine Ausnahme vom Server1 bzw. der Adresse 1.1.1.1 verarbeitet und angezeigt wird. Die einzige ausnahme bildet die Adresse sub1.Server1.de, die auf ein Verzeichnis (sagen wir mal var/www/html/sub1/) auf dem Server2 bzw. 2.2.2.2 zeigen soll.

    Jetzt habe ich auf Server1 in der 000-default.conf folgenden Eintrag angehangen:

    <VirtualHost sub1.server1.de:80>
        ServerName sub1.server1.de
        DocumentRoot /var/www/html/sub
        Alias /sub "/var/www/html/sub"
        KeepAlive On
        ProxyPreserveHost On
        ProxyPass / http://2.2.2.2:80/sub/
        ProxyPassReverse / http://2.2.2.2:80/sub/
    </VirtualHost>


    Auf dem Server2 unter 2.2.2.2 liegt nun folgender Eintrag vor:

    <VirtualHost sub1.server1.de:80>
        ServerName sub1.server1.de
        DocumentRoot /var/www/html/sub
        Alias /sub "/var/www/html/sub"
        KeepAlive On
    </VirtualHost>


    Ich habe allerdings unbeabsichtigt erzielt, dass alles von Server1 auf Server2's "/var/www/html/sub" umgeleitet wird, obwohl das nur für die Subdomain sub1 gelten sollte.

    Kennt sich damit jemand aus und könnte mir sagen, was ich anders machen muss?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    Wenn ich mich recht erinnere muss der Pfad der Quell-URL (in deinem Fall "/sub") identisch mit dem Pfad der Ziel-URL sein.

    Sprich:

    http://1.1.1.1:80/sub auf http://2.2.2.2:80/sub geht.
    http://sub1.server1.de auf http://2.2.2.2:80/sub geht nicht.

    Ich hab das ganze mal für Jenkins eingerichtet:

    <VirtualHost *:80>
            ServerName jenkins.example.com
            DocumentRoot /var/www/jenkins
            # Redirect / https://jenkins.example.com/
            RewriteEngine on
            ReWriteCond %{SERVER_PORT} !^443$
            RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
    </VirtualHost>
    
    <VirtualHost *:443>
            ServerName              jenkins.example.com
            ServerAlias             jenkins
            ServerAdmin             webmaster@localhost
            SSLEngine               on
            SSLCertificateFile      /etc/apache2/ssl/cert3.crt.pem
            SSLCertificateKeyFile   /etc/apache2/ssl/cert3.key.pem
            ErrorLog                ${APACHE_LOG_DIR}/error.log
            CustomLog               ${APACHE_LOG_DIR}/access.log combined
            ProxyPass               /  http://localhost:8080/ nocanon
            ProxyPassReverse        /  http://localhost:8080/
            ProxyPassReverse        /  http://jenkins.example.com/
            RequestHeader set X-Forwarded-Proto "https"
            RequestHeader set X-Forwarded-Port "443"
            ProxyRequests           Off
            AllowEncodedSlashes     NoDecode
            <Proxy http://localhost:8080/*>
                    Order deny,allow
                    Allow from all
            </Proxy>
    </VirtualHost>


    Wie du siehst ist der Pfad identisch. Jenkins hört auf den Port 8080 ohne weitere Angaben und kann über die Domain "jenkins.example.com" erreicht werden. Die originale Jenkins-URL wäre "localhost:8080".

    Das funktioniert ohne Proxy-Warning dafür aber mit https forwarding. Vlt. hilft dir das weiter.

    Beitrag zuletzt geändert: 5.11.2019 7:41:45 von schrotti12
  4. Autor dieses Themas

    vampiresilence

    Kostenloser Webspace von vampiresilence

    vampiresilence hat kostenlosen Webspace.

    Wenn ich das recht erkenne, leitest du praktisch intern von Port 80 auf Port 443 um, wenn die URL "jenkins.example.com" angesprochen wird. Das ist noch nicht genau das was ich brauche, aber es hat mich auf eine gute Spur gebracht, deshalb danke!

    Einen kleinen Schritt bin ich jetzt auch weitergekommen. Und zwar mag mod_proxy anscheinend keine wildcards in Form von Asterisken, sprich "*".

    Wenn ich es folgendermaßen definiere, leitet er korrekt auf den anderen Server um, ohne das andere Subdomains betroffen sind:
    <VirtualHost domain.de:80>
    	ServerName domain.de
    	ServerAdmin webmaster@localhost
    	DocumentRoot /var/www/html
    </VirtualHost>
    
    <VirtualHost sub1.domain.de:80>
    	ServerName sub1.domain.de
    	ProxyPass / http://2.2.2.2/
    	ProxyPassReverse / http://2.2.2.2/
    </VirtualHost>

    Der nächste Schritt wäre für mich jetzt, dass der Server2 die Request-URI nimmt und korrekt auf seine eigenen Verzeichnisse umleitet, das tut er allerdings nicht so ohne Weiteres und ich verstehe wieder nicht so recht warum.

    Ich habe im Prinzip die exakt gleiche Konfiguration übernommen, die auf Server1 funktioniert. Tut sie auf Server2 allerdings nicht. Aktuell sieht sie folgendermaßen aus:
    <VirtualHost sub1.domain.de:80>
    	ServerName sub1.domain.de
    	DocumentRoot /var/www/sub1
    	
        Alias /sub1 "/var/www/sub1"
        <Directory "/var/www/sub1">
            AllowOverride All
            Allow from All
        </Directory>
    
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

    Er leitet jedoch alles auf var/www/html um. Man beachte "AllowOverride All" sollte eigtl Rewrites per .htaccess ermöglichen. Es werden allerdings selbst Dinge wie
    RewriteEngine on
    RewriteRule ^user$ user.php?$1 [QSA,L]

    komplett ignoriert und landen stumpf in var/www/html.
  5. schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    Guten Morgen,

    zu meiner Konfiguration: Sie macht einen ReWrite von Port 80 auf Port 443. Das bedeutet, wenn jemand http://jenkins.example.com aufruft, wird automatisch https://jenkins.example.com geöffnet. Die eigentliche "Weiterleitung" erfolgt von Port 443 auf Port 8080 auf welchem der Jetty-Server hört, der in der Datei "jenkins.war" integriert ist.

    Zu deinem Problem:

    Du machst eine Weiterleitung auf Server1 auf "http://2.2.2.2/", der VirtualHost "<VirtualHost sub1.domain.de:80>" auf Server 2 hört aber auf "sub1.domain.de". Ich vermute, er fällt dann auf den Default-Wert zurück, welcher "/var/www/html" sein dürfte.

    Beitrag zuletzt geändert: 6.11.2019 7:28:26 von schrotti12
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!