2013-03-09 6 views
52

Ich hosten eine statische Website auf Amazon S3 mit der statischen Website-Hosting-Option, so dass S3 einen Ordner rendern wird, ohne mich explizit auf meinen Index verweisen. HTML-Datei.Amazon CloudFront respektiert nicht meine S3 Website Bucket index.html Regeln

Hier ist zum Beispiel eine direkte Verbindung zu einer Seite in meinem S3-Bucket: http://new.rdegges.com.s3-website-us-east-1.amazonaws.com/category/2009/ Wie Sie sehen, wenn Sie diese URL besuchen, rendert Amazon S3 automatisch die index.html-Datei innerhalb dieses Verzeichnisses, so dass ich es haben kann URLs löschen

Das alles funktioniert gut auf S3. Das Problem, das ich habe, ist Amazon Cloudfront, dieses Verhalten auch richtig zu behandeln. Wenn ich eine Cloudfront-Verteilung mit meinem als Ursprung angegebenen S3-Bucket erzeuge und sage, dass sie "index.html" als Root verwenden soll, funktioniert das Verhalten von index.html, das S3 gerade beendet hat, nicht mehr zusammen.

Zum Beispiel, hier ist meine gleiche URL wie oben auf Cloudfront: http://d1mj00c6pby3gc.cloudfront.net/category/2009/

Leider ist die URL oben nicht funktioniert, aber wenn ich die Index-Datei manuell angeben, es funktioniert, zB: http://d1mj00c6pby3gc.cloudfront.net/category/2009/index.html

Meine Frage ist: Wie muss ich Cloudfront so konfigurieren, dass es meine S3-Bucket-Einstellungen für meine Website berücksichtigt?

+0

Sie können es definitiv für den Stamm festlegen. Nicht sicher, ob es pro Verzeichnis funktioniert. http://aws.typepad.com/aws/2010/08/new-amazon-cloudfront-feature-default-root-object.html – dirn

+1

Hey @dirn, yep! Ich verwende den Standardstamm von index.html, aber aus irgendeinem Grund gilt es nicht für Unterordner (nur die oberste Ebene). Ich finde das merkwürdig, da S3 die selbe Einstellung hat, und es gilt auch für alle Unterordner, arg. – rdegges

+0

"Respekt nicht" .. Woow! +1 von mir –

Antwort

91

S3 Website-Funktionen können in Verbindung mit Amazon CloudFront verwendet werden. Die S3-Website verwendet jedoch einen anderen Domänennamen als normale S3-Buckets. In diesem Fall müssen Sie Origin Domain Name der Ursprungskonfiguration Ihrer CloudFront-Verteilung auf new.rdegges.com.s3-website-us-east-1.amazonaws.com setzen.

Sie diese URL in Anspruch nehmen (Endpoint) von dem statischen Website Hosting-Panel auf S3:

Static Website Hosting panel on S3

Sobald Cloudfront auf den S3 Website-Domain-Namen hingewiesen wird, sollen die S3-Website-Features funktionieren.

+1

Dies sollte die akzeptierte Antwort sein! –

+0

Danke, das war unglaublich nervig! – rdegges

+4

Große Auflösung, danke. Dies passiert vielen Leuten, auf die ich wette, da cloudfront automatisch mit dem Bucket-Namen und nicht mit der statischen Website-URL kompiliert. Der Unterschied war mir zunächst nicht klar. – SimplGy

11

Ich möchte ein paar Dinge zu der angenommenen Antwort hinzufügen.

Stellen Sie zuerst sicher, dass Sie eine Default Root Object auf Ihrer Cloud Front haben. Wie in der documentation angegeben, gilt dies nicht für subdirectories.

Wenn Sie eine neue Cloudfront-Verteilung einrichten, können Sie Ihren Bucket bucket-name.s3.amazonaws.com auswählen. Beachten Sie, dass die Region in der URL nicht angegeben ist. Was Sie tun müssen, ist die statische Site URL von S3 zu greifen und diese als origin url zu verwenden (die Region wird dort sein).

+0

Ich hatte das Problem, dass das root-Objekt den Standardindex.html nicht gab. Zuerst habe ich versucht, es an die cname www.example.com und www.example.com/index.html zu senden, die nicht funktionierten, und ich hatte es funktioniert, wenn ich einfach das root-Objekt als index.html gesetzt –