Cloudfront-Weiterleitung www zur nackten Domain mit ssl [geschlossen]

73

Verzeihen Sie mir, wenn dies zuvor gefragt wurde, es gibt eine Reihe von Ressourcen, die dies berühren, aber nichts scheint für meinen spezifischen (https) Anwendungsfall zu passen.

Ich versuche, https://www.example.com auf https://example.com umzuleiten . Ebenso sollte dies für http://www.example.com bis https://example.com funktionieren .

Ich habe eine Cloudfront-Distribution mit dem Ursprung eines s3-Buckets eingerichtet, http zu https umgeleitet, den cname example.com hinzugefügt und mein Domain-Zertifikat hinzugefügt (das sowohl für die www-Subdomain als auch für die nackte Domain funktioniert).

Ich habe auch eine separate Distribution mit einem c-Namen für www.example.com eingerichtet, das Zertifikat hinzugefügt und den Ursprung in einem separaten s3-Bucket festgelegt, der in (statisches Website-Hosting) alle Anforderungen an https://example.com umleitet .

Die Umleitung funktioniert wie erwartet für http://example.com zu https://example.com , http (s): //www.example.com zu https://example.com jedoch nicht.

In Route 53 habe ich die Stammdomäne auf die erste Cloudfront-Distribution und www auf die zweite verteilt.

Marc Greenstock
quelle
Bitte sehen Sie meine Antwort hier, die ziemlich hilfreich sein sollte: stackoverflow.com/questions/36265027/…
Marcel
6
Könnten wir diese Frage auf Serverfehler verschieben, anstatt sie zu schließen? Ich möchte eine Antwort hinzufügen.
2540625
+1 für den Vorschlag von @ jtheletter. Nur zur Veranschaulichung habe ich ein ausführliches Tutorial zum Einrichten einer statischen Website mit S3, CloudFront und Route53 geschrieben. Es beschreibt eine grundlegende AWS-Infrastruktur für die ordnungsgemäße Behandlung einer WWW-Subdomäne.
Paul Razvan Berg

Antworten:

99

So hosten Sie eine Website auf AWS:

https://www.example.com, http://www.example.com und http://example.com leiten alle zu https://example.com weiter

du musst:

  1. Erstellen Sie zwei S3-Buckets mit dem Namen example.com und www.example.com .

  2. Aktivieren Sie das statische Website-Hosting für diese beiden Buckets.

  3. Konfigurieren Sie die Umleitung im Bucket www.example.com zu: https://example.com . Wählen Sie in den Bucket-Eigenschaften Statisches Website-Hosting => Alle Anforderungen an einen anderen Hostnamen umleiten . In Ziel Eimer oder Domain - Feld geben Sie example.com , in Protokoll - Feld geben Sie https

  4. Erstellen Sie für diese Buckets zwei CloudFront-Distributionen. Jede dieser Verteilungen zeigt auf den entsprechenden Bucket:

  5. Geben Sie für den Origin-Domain-Namen Bucket-URLs an, die im Abschnitt Statisches Website-Hosting angegeben sind . Die URLs sollten die Form (oder eine ähnliche) haben: example.com.s3-website-us-west-1.amazonaws.com

    • Setzen Sie auf beiden Distributionen HTTP auf HTTPS- Umleitung.

    • VERWENDEN SIE KEINE VON AMAZON AUTOCOMPLETE EMPFOHLENE URL!

    • Stellen Sie NICHT das Standard-Stammobjekt- EIGENTUM ein!

  6. Konfigurieren Sie DNS, indem Sie A-Einträge für www.example.com und example.com so einstellen, dass sie auf entsprechende CloudFront-Distributionen verweisen.

Warum funktioniert es? CloudFront bietet in beiden Fällen die Umleitung von HTTP zu HTTPS (mit und ohne www). Der Bucket für www.example.com bietet eine Weiterleitung zu example.com. Wenn Sie diese Distribution nicht hätten, könnte der Bucket die Anforderung für https://www.example.com nicht umleiten. S3 selbst unterstützt HTTPS für statisches Website-Hosting nicht.

RKI
quelle
15
Stellen Sie HTTP nicht auf HTTPS-Umleitung in der www-> nackten CF-Distribution ein, um eine unnötige Umleitung zu vermeiden. Sie möchten, dass example.com zuerst direkt zu example.com und nicht zu example.com wechselt .
Maletor
Setzen Sie den A-Rekord nicht auf 53 für www. Verwenden Sie einen CNAME. Verwenden Sie ALIAS für A- und AAAA-Einträge in der Stammdomäne.
Maletor
7
Es ist auch erwähnenswert, dass die einfache Verwendung eines CNAME auf www.example.com, um auf example.com zu verweisen, nicht umleitet. Stattdessen zeigt www.example.com denselben Inhalt wie example.com an, der nicht identisch ist.
ffxsam
1
Meine Lösung bestand also darin, den Bucket www.mydomain.com auf domain.com umzuleiten und das Protokoll auf https festzulegen. In jeder der Cloudfronts (dh der für www.mydomain.com und der für mydomain.com) habe ich den CNAME auf www.mydomain.com bzw. mydomain.com festgelegt. Nachdem ich dies getan hatte, konnte ich in S3 die entsprechende Cloudfront als Alias ​​für A-Datensatz auswählen. Wie oben beschrieben, habe ich die von Autocomplete vorgeschlagene URL nicht verwendet - ich habe den Hostnamen der statischen Website verwendet - und die Standard-Root-Eigenschaft nicht festgelegt.
Sam Kenny
1
Warum erklärt kein Körper, dass Sie für jede Weiterleitung ein SSL-Zertifikat installieren müssen, um eine "nicht sichere" Warnung des Browsers zu verhindern? Es ist einfach, aber Leute wie ich "nur ein Entwickler" wissen das nicht. Ich habe tagelang versucht, es zu lösen, bis ich diesen Rat entdeckt habe ...
Philip Enc
57

Dank dieser Antwort habe ich die Lösung gefunden: Amazon S3 Redirect und Cloudfront

Zusamenfassend:

Cloudfront beachtet die in S3 eingerichteten Umleitungsregeln nicht, wenn der Ursprung nur die Bucket-ID ist. Stattdessen musste ich den Ursprung auf den angegebenen Hostnamen der statischen s3-Website setzen.

Marc Greenstock
quelle
7
Vielen Dank für die Veröffentlichung Ihrer Antwort. Ich habe es verwendet, um HTTPS-Weiterleitungen von nackten Domains zu www zu erhalten, z. B. https://example.com -> https://www.example.com . Diese Lösung ist nicht intuitiv, da die AWS-Benutzeroberfläche automatisch zum Standard-S3-Hostnamen (Bucketname.s3.amazonaws.com) vervollständigt wird. Dies wäre Ihrer Meinung nach der richtige Weg, aber für diesen Anwendungsfall ist der statische Website-Hosting-Endpunkt (z Bucketname.s3-website-us-east-1.amazonaws.com) ist das, was Sie brauchen.
Kellen
7
Es ist auch wichtig , dass Ihre Cloudfront Ausschüttungen nicht alles Set als hat Standard - Root - Objekt , weil es die Umleitung in dem S3 Eimer brechen.
Michał Czapliński
1
Ihr Link verweist auf eine Frage. Welche Antwort auf diese Frage wollten Sie verlinken?
2540625
@kellen, wie leiten Sie Apex an www weiter? Das versuche ich für meine HTTPS-Domain zu tun. Meine kanonischen URLs enthalten das www.
Costa
1
@Costa Schauen Sie sich die Anweisungen in dieser Antwort an. Kehren Sie einfach die Domains um, da Sie Apex wollen -> www. Wichtig ist, dass Sie die im Bucket im Abschnitt "Static Website Hosting" angegebene URL als CloudFront-Ziel verwenden und nicht die URL für die automatische Vervollständigung. stackoverflow.com/a/42869783/94671
kellen