Apache-Subdomain-Weiterleitung zu einer anderen Subdomain eingerichtet

Apache-Subdomain-Weiterleitung zu einer anderen Subdomain eingerichtet

Ich versuche, zwei Subdomains einzurichten, für aund bin 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.comund b.domain.comzu 127.0.0.1 hinzugefügt. Der DNS in der Produktion hat Einträge für was a.domain.comund b.domain.comsind, 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.comdie 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:8444b.domain.comlocalhost:8444localhost:8445a.confb.confa.conflocalhost:8445a.domain.com/ba.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 babgeglichen wurde, a.confda 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.comoder 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.comoder versuche https://b.domain.com, werden beide zum richtigen Server aufgelöst: azu 8444und bzu 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.comund 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.comdas 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.comist genau dasselbe, mit dem entsprechenden Servernamen, Serveralias, Weiterleitungen, Standort und Port von localhost.

verwandte Informationen