Apache2 VirtualHosts Http-Proxy
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
-
Hallo mal wieder
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? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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. -
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage