6

Ich habe eine Domäne formulagrid.com.Unterstützt HTTPS URL-Umleitung mit einer einzigen CloudFront-Verteilung

Ich verwende AWS S3, um es als statische Website zu hosten. Mein Problem war, dass ich die www-Subdomain auf die blanke Domain so umleiten wollte:

  • https://www.formulagrid.com -> https://formulagrid.com
  • http://www.formulagrid.com -> https://formulagrid.com

Amazon bietet URL Umleitung von S3 Eimer auf S3 Eimer, wenn beide Setup sind für statische Website-Hosting.

So was hatte ich gesetzt zu tun bis zwei Eimer:

  • formulagrid.com - eigentliche Website
  • www.formulagrid.com - existiert nur auf der eigentlichen Website

Das funktioniert völlig in Ordnung neu auszurichten Sie arbeiten nur über HTTP, aber S3 hat überhaupt keine Unterstützung für HTTPS.

Die Möglichkeit, HTTPS für die Verbindung mit einer statischen S3-Website zu verwenden, besteht darin, eine CloudFront-Verteilung vor einem S3-Bucket einzurichten. Obwohl CloudFront HTTPS bereitstellt, existiert es hauptsächlich als CDN.

Anfangs hatte ich ein einzelnes CloudFront-Verteilungssetup vor dem S3-Bucket mit der aktuellen Site. Alles schien funktionstüchtig zu sein: Die Site wurde über das CDN verteilt, es hatte HTTPS und HTTP wurde zu HTTPS umgeleitet.

Es gab eine Ausnahme.

  • https://www.formulagrid.com eine völlig gebrochene Seite
  • war

Nach dem Versuch, die Quelle des Fehlers für eine Weile zu finden, erkennen ich, es ist, weil es nicht durch das CDN würde und versuchen S3 über den Zugriff HTTPS funktioniert nicht.

Schließlich musste ich noch eine weitere Verteilung bereitstellen, um vor dem S3 Bucket zu sitzen, so dass es über HTTPS zugänglich war. Hier kommen meine Bedenken ins Spiel, denn CloudFront möchte, wie ich bereits erwähnt habe, ein CDN sein.

Es macht für mich keinen Sinn, ein CDN vor einer URL zu haben, die gerade zu einer anderen weiterleitet. Außerdem wirft es die Frage auf, ob ich für jede Anfrage, die die Subdomain www erreicht, doppelt belastet würde, weil sie nach der Umleitung auf die andere CloudFront-Distribution treffen würde.

Das ist frustrierend, weil ich versuche, eine "serverlose" Architektur mit Lambda zu machen, und eine EC2-Instanz nur für URL-Rewriting bereitstellen zu lassen, ist nichts, was ich tun möchte, wenn es mein letzter Ausweg ist.

Die Lösung wäre trivial, wenn Amazon irgendeine Form von URL Neuschreiben anbieten würde oder wenn CloudFront selbst umleiten würde, aber keine von beiden existiert so weit ich weiß (lass es mich wissen, wenn sie das tun).

Ich bin neu in AWS, also hoffe ich, dass jemand mit mehr Erfahrung mir in die richtige Richtung zeigen kann.

Antwort

7

Sie denken zu eng - mit diesem Setup ist nichts falsch.

wäre die Lösung trivial sein, wenn Amazon jede Form von URL

Sie tun Umschreiben angeboten - den leeren Eimer.

S3 hat absolut keine Unterstützung für HTTPS.

Nicht für website-gehostete Buckets, nein ... aber CloudFront tut.

CloudFront ist nicht nur ein CDN. Es ist auch ein SSL-Offloader, Host: Header Rewriter, Pfadvorbereitung, Geolocator, Georestriktor, Secure Content Gateway, http zu https Redirector, Fehlerseite Anpassung, Root-Seite Ersetzer, Web Application Firewall, Herkunft Header Injektor, dynamische Inhalt gzipper, Pfad-basierte Multi -origin HTTP-Anfrage-Router, Viewer-Plattform-ID, DDoS-Mitigator, Zone Apex Alias-Ziel ... also nicht zu hängen auf "CDN" oder auf der Tatsache, dass Sie einen Dienst vor einem anderen stapeln - CloudFront wurde zu einem großen Teil zur Ergänzung von S3 entwickelt. Sie sind jeweils auf bestimmte Aspekte der Lagerung und Lieferung spezialisiert.

Also, Sie haben es richtig gemacht ... das meiste davon, trotzdem ... Erstellen Sie einen Eimer, konfigurieren Sie es für Website-Hosting, stellen Sie es um alle Anfragen an eine andere Website umleiten (das nicht-www) und setzen ein CloudFront-Verteilung davor - unter Verwendung der Website-Endpunkt-URL für Bucket in CloudFront, nicht der aus der Dropdown-Liste - konfiguriert mit hohen TTLs, sodass CloudFront eine minimale Anzahl von Anfragen an S3 sendet, dann setzen Sie Ihre (kostenlos!) SSL-Zertifikat von Amazon Certificate Manager. Alternatives HTTPS-Domain-Routing: gelöst. Keine Server, keine Fehlerbehebung und billig. Die nur Gebühren sind die Nutzung - es gibt keine wiederkehrende Grundgebühr, wie es mit Servern wäre.

Zusätzliches Guthaben: Konfigurieren Sie die Redirecting CloudFront-Verteilung für die günstigste Preisstufe. Umleitungen von teureren Standorten werden entweder an einen billigeren Standortermittlungsort geleitet oder - bei der Option von CloudFront - können sie von einem Standort mit höheren Kosten bedient werden, werden aber mit dem niedrigeren Preis abgerechnet.

Beachten Sie, dass die meisten der Zeit, Cloudfront sollte Cache die Umleitungen von S3 aus es dienen ... und wenn Sie einen Eimer konfigurieren, dass alle Anforderungen an einen anderen Hostnamen zu umleiten, die Umleitung ist ein 301permanent Umleitung - die Browser sollen selbst cachen.

+0

Danke für die Antwort! Ich habe im Prinzip alles getan, was du gesagt hast. Ich habe eine Frage. Für Anfragen, die umgeleitet werden, geht es nicht 'CDN -> leer S3 -> CDN -> S3'? Das ist mein Hauptproblem. – m0meni

+0

Nachdem CloudFront die Weiterleitung aus dem leeren Bucket zwischengespeichert hat, wäre CF> CF> S3, und wenn der Inhalt der S3-Site zwischengespeichert wird, nur CF> CF. Nach der ersten Landung werden sie zur blanken Domain weitergeleitet und nachfolgende Links würden sie dort halten ... das sollte nicht anders funktionieren, als wenn CF die native Fähigkeit hätte, auf andere Domains umzuleiten - diese anfänglichen Anfragen würden immer noch zweimal CF treffen , da die Weiterleitung den Browser dazu bringt, was der Browser * immer * annehmen wird, ist ein anderer Ort, weil sich der Hostname ändert ... ob es tatsächlich derselbe Rechner ist oder nicht. –

+0

Würde das nicht bedeuten, dass ich zweimal pro umgeleiteter Anfrage berechnet würde? Einmal für jede CF-Anfrage? – m0meni