Ich versuche, eine Promo-Subdomain zu meiner Site hinzuzufügen, die bereits auf https ist, und dann eine Weiterleitungs-URL zu verwenden, um auf eine andere Seite der Site umzuleiten. Für zB, wenn meine Seite https://example.com
wäre und eine Seite https://example.com/xyz/xyz/promo
hätte, dann möchte ich eine Browserumleitung, wenn ich https://promo.example.com
auf diese Seite eintippe. Ich habe alle relevanten AWS Route 53-Einstellungen eingerichtet.
Meine Nginx-Serverblöcke haben dies
%Vor%Aktuelles Verhalten:
Es wird korrekt umgeleitet, wenn ich promo.example.com
direkt ohne https eintippe. Aber wenn ich https://promo.example.com
eintippe, wird nur example.com angezeigt, wobei die URL https://promo.example.com
Erwartetes Verhalten:
Wenn ich https://promo.example.com
eintippe, sollte es zu https://example.com/xyz/xyz/promo
Ich kann https://promo.example.com
nicht setzen und dann mit den Serverblöcken umleiten, weil nginx einen Fehler auslöst.
Wie kann ich https://promo.example.com
umleiten, um zu https://example.com/xyz/xyz/promo
Aufgrund des Headers Strict-Transport-Security stellt der Browser 301 redirect automatisch zur Verfügung, so dass dieser Serverblock noch nie benutzt wurde:
%Vor%Die Port-Umleitung 80- & gt; 443 passiert, bevor der Browser mit dem Server verbunden ist, so dass Nginx immer den neuesten Serverblock basierend auf Port 443 bedient. Dies sollte Ihnen helfen:
%Vor%Jeder Server kann eine einzige Instanz von https haben, in diesem Fall ist es example.com. Wenn also https einer URL vorangestellt wird, wird der Benutzer unabhängig von den URLs auf example.com umgeleitet.
Um den Benutzer mit https zur beabsichtigten URL umleiten zu lassen, benötigen Sie einen separaten Port oder eine separate IP für diese Site.
Laut Ссылка lautet der Standardwert für die listen-Anweisung listen *:80 | *:8000;
.
Wenn die Direktive nicht vorhanden ist, wird entweder *: 80 verwendet, wenn nginx mit den Superuser-Privilegien läuft, oder *: 8000.
Daher haben die von Ihnen bereitgestellten Snippets keinerlei Auswirkungen auf https-Verbindungen, da sie nicht auf Port 443 über SSL angewendet werden.
Sie haben weder Ihre SSL-Konfigurations-Snippets noch die Zertifikatsdetails angegeben, damit wir Ihnen eine vollständige Antwort liefern können, aber sobald das oben Gesagte verstanden ist, würde die Antwort wahrscheinlich selbst greifen.
Sie können Ссылка in Bezug auf die Konfiguration eines einzelnen Servers für HTTP und HTTPS-Anfragen.
P.S. Im Allgemeinen eignet sich HTTPS selbst nicht gut für Subdomains. Sofern Sie nicht extra bezahlt haben, deckt Ihr Zertifikat wahrscheinlich keine der Subdomains ab, was bedeutet, dass es zu Browserwarnungen führt, sollten Sie oder Ihre Benutzer versuchen, dies zu tun Zugriff auf solche Websites über das Schema https://
address.
Es gibt zwei Möglichkeiten, dies zu umgehen:
Lassen Sie ein Platzhalterzertifikat für * .example.com zu, damit alle Subdomänen dasselbe Zertifikat verwenden können.
Führen Sie jede SSL-Site unter einer anderen IP-Adresse aus. Auf diese Weise weiß der Webserver, welches SSL-Zertifikat er an den Browser senden kann. - durch Überprüfen der IP-Adresse, die die eingehende Verbindung empfangen hat.