Die https-Site kann nicht an einen anderen URL-nginx-Serverblock umgeleitet werden

8

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

ist

Erwartetes Verhalten:

Wenn ich https://promo.example.com eintippe, sollte es zu https://example.com/xyz/xyz/promo

umleiten

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

zu gehen?     
Slartibartfast 07.08.2015, 12:22
quelle

5 Antworten

5

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%     
Anatoly 15.09.2015, 06:47
quelle
3

Versuchen Sie Folgendes:

%Vor%     
Curlas 07.08.2015 12:32
quelle
2

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.

    
Sudhanva Kotabagi 08.09.2015 12:45
quelle
2

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.

    
cnst 09.09.2015 08:15
quelle
1

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.

Josip Ivic 15.09.2015 09:04
quelle

Tags und Links