
Ich versuche, zwei Subdomains einzurichten, für a
und b
in domain.com
. Ich verwende zwei .conf-Dateien, die mit entsprechenden Änderungen an ServerName und ProxyPass ziemlich gleich aussehen:
<VirtualHost *:80>
ServerName a.domain.com #This was added as a try for a fix.
Redirect permanent / https://a.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName a.domain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/a
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#SSL stuff
#Proxies
ProxyPass / https://a.domain.com:8444/
ProxyPassReverse / https://a.domain.com:8444/
ProxyPass /a/ https://a.domain.com:8444/
ProxyPassReverse /a/ https://a.domain.com:8444/
ProxyPass /b/ https://b.domain.com:8445/
ProxyPassReverse /b/ https://b.domain.com:8445/
</VirtualHost>
Dies wird in meiner Testumgebung durchgeführt und repliziert etwas Ähnliches wie das, was derzeit in der Produktion ist. In /etc/hosts habe ich a.domain.com
und b.domain.com
zu 127.0.0.1 hinzugefügt. Der DNS in der Produktion hat Einträge für was a.domain.com
und b.domain.com
sind, was dieselbe IP ist (ich habe dies auch auf der Maschine getan, von der aus ich dies teste).
Beachten Sie auch, dass ich keinen Inhalt aus ihren Stammverzeichnissen bereitstelle. Ich habe dies hinzugefügt, um das im Titel genannte Problem zu beheben. In beiden Verzeichnissen befindet sich jedoch ein einfaches HTML.
Was ist das eigentliche Problem?
Wenn ich versuche , ist das Ergebnis wie erwartet a.domain.com
die Webanwendung von . Wenn ich versuche , ist das Ergebnis auch statt . Sowohl als auch sind aktiviert, und wenn ich deaktiviere , erhalte ich korrekt . Wenn ich auch wie versuche , wird die Umleitung wieder zu aufgelöst .localhost:8444
b.domain.com
localhost:8444
localhost:8445
a.conf
b.conf
a.conf
localhost:8445
a.domain.com/b
a.domain.com
Ich habe mehrere Fragen und Tutorials gelesen und die meisten davon haben entweder etwas, das wie in meiner Konfiguration funktioniert, oder fügen NameVirtualHost hinzu, was meines Wissens nach für meine Version von Apache nicht erforderlich ist. Ich habe auch einen Servernamen in Port 80 hinzugefügt, da ich dachte, dass die Anfrage möglicherweise b
abgeglichen wurde, a.conf
da es sich um dieselbe IP handelt, aber das hat auch nicht funktioniert.
Was übersehe ich hier? Ist es etwas mit mod_proxy, das ich scheinbar ignoriere? Wenn möglich, würde ich gerne eine Datei pro Webanwendung behalten. Danke!
Dies ist auf Ubuntu 18.04.2, Apache 2.4 (mod_proxy und mod_ssl), Tomcat 9. Ich werde mein Bestes tun, Ihnen alle weiteren Informationen zu geben, die Sie möchten.
AKTUALISIEREN
Auch mit dieser Konfiguration versucht. Dasselbe unerwünschte Ergebnis.
<VirtualHost *:80>
ServerAlias a.domain.com
Redirect permanent / https://a.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName a.domain.com
ServerAdmin webmaster@localhost
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#SSL stuff
#Proxies
Redirect /b https://b.domain.com
<Location />
ProxyPass https://localhost:8444/
ProxyPassReverse https://localhost:8444/
</Location>
<Location /a>
ProxyPass https://localhost:8444/
ProxyPassReverse https://localhost:8444/
</Location>
</VirtualHost>
AKTUALISIEREN
Ok, ich habe gerade etwas sehr Ärgerliches gefunden. Wenn ich in meinem Browser entweder a.domain.com
oder eingebe b.domain.com
, werden beide zu aufgelöst a.domain.com
. Das ist das Problem, das ich ursprünglich beschrieben habe. ABER wenn ich https://a.domain.com
oder versuche https://b.domain.com
, werden beide zum richtigen Server aufgelöst: a
zu 8444
und b
zu 8445
.
Da dies sehr frustrierend ist, werde ich eine Pause einlegen und dies später analysieren.
AKTUALISIEREN
Nach einer langen Pause habe ich ein paar andere zufällige Optimierungen ausprobiert, nur um zu sehen, was passiert, und wieder funktionierte nichts wie erwartet, außer bei Verwendung von HTTPS. Ich habe Postman installiert, um zu sehen, was in der Anfrage gesendet wurde, und habe herausgefunden, dass in Postman sowohl HTTP als auch HTTPS den Host korrekt verwenden. Noch besser/schlechter: Die tatsächliche Antwort zeigt die unterschiedlichen Willkommensseiten für a.domain.com
und b.domain.com
, was bedeutet, dass meine Konfigurationen ordnungsgemäß funktionieren, wenn ich Postman verwende.
Ich denke, diese ganze Tortur könnte nur ein Cache-Problem sein, aber mein bevorzugter Testbrowser (Firefox dev ed) ist so eingestellt, dass er keine Inhalte zwischenspeichert. Ich werde die Antworten mit curl und meinen anderen Browsern überprüfen.
Antwort1
Schuldiger:Der Cache.
Irgendwann änderte sich die Konfiguration meines Browsers (vielleicht ein Update?) und ich hatte über 3 GB Cache, einschließlich der Testseiten, die ich als Subdomains einrichten wollte. Igitt.
Nach dem Leeren des Caches wurde beim Aufrufen meiner URLs erwartungsgemäß eine Warnung über mein selbstsigniertes Zertifikat angezeigt. Nachdem ich die Risiken akzeptiert hatte, wurde ich auf die richtigen Websites umgeleitet. Dies geschah, indem ich b.domain.com
das Protokoll verwendete, ohne es hinzuzufügen.
Um sicherzustellen, dass dies funktioniert, habe ich es in allen meinen anderen 7 Browsern (muss sichergehen) und curl mit und ohne das Protokoll getestet und die Ergebnisse waren ebenfalls wie gewünscht.
Am Ende war die Konfiguration ok. Ich werde sie hier posten, falls du sie brauchstEin Apache-Server, der über Subdomains Proxys an bestimmte Tomcat-Instanzen sendet und dabei proxy_mod verwendet, das auch sofort von Port 80 auf Port 433 umleitet..
<VirtualHost *:80>
ServerName a.domain.com
Redirect permanent / https://a.domain.com/
</VirtualHost>
<VirtualHost *:443>
ServerName a.domain.com
ServerAdmin [email protected]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#SSL stuff
SSLEngine On
SSLCertificateFile /etc/ssl/certs/DONT_USE_SELF_SIGNED.pem
SSLCertificateKeyFile /etc/ssl/private/CERTS_IN_PRODUCTIve.key
SSLVerifyClient none
#Proxies
ProxyRequests Off
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
#Redirections
Redirect /b https://b.domain.com
<Location />
ProxyPass https://localhost:8444/
ProxyPassReverse https://localhost:8444/
</Location>
<Location /a>
ProxyPass https://localhost:8444/
ProxyPassReverse https://localhost:8444/
</Location>
</VirtualHost>
Bitte beachten Sie, dass die Einstellungen für SSL-Proxy und SSL für selbstsignierte Zertifikate gelten. Bitte lesen Sie die jeweilige Dokumentation, wenn Sie dies für produktive Umgebungen implementieren. Beachten Sie auch, dass dies die Konfigurationsdatei für ist a.domain.com
. Das Äquivalent für b.domain.com
ist genau dasselbe, mit dem entsprechenden Servernamen, Serveralias, Weiterleitungen, Standort und Port von localhost.