CloudFront + S3-Website: "Der angegebene Schlüssel nicht vorhanden", wenn eine implizite index-Dokument angezeigt werden soll
Habe ich nur implementiert, die statische website auf Amazon S3, die derzeit hier eingesehen werden: http://www.rdegges.com.s3-website-us-east-1.amazonaws.com/
Wenn Sie klicken Sie auf die Artikel-links, sehen Sie die folgende Fehlermeldung:
S3 beschwert sich die Datei nicht vorhanden ist. Nun, hier ist, was komisch ist das-ich bin mit CloudFront auf meine domain. Also, wenn Sie klicken Sie auf diesen Artikel verlinken, es sendet die Anfrage an CloudFront die dann versucht zu Holen, die Datei wieder aus dem S3-bucket.
Allerdings, wenn Sie besuchen dieselbe URL vom S3 direkt, zB: http://www.rdegges.com.s3-website-us-east-1.amazonaws.com/2015/building-a-heroku-addon-planning/ die Seite laden einfach nur gut.
Scheint es, dass etwas ist verloren in der übersetzung hier.
Hat jemand eine Anregung, was ich tun kann, um fix an meinen Einstellungen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich werde gehen auf ein Glied und sagen, dass der angegebene Schlüssel nicht technisch vorhanden, also die Fehlermeldung ist technisch korrekt, aber sagen nicht die ganze Geschichte. Sollte dies leicht zu beheben.
S3-buckets haben two1 Endpunkte, "REST" und "website". Sie haben zwei unterschiedliche feature-sets. Die web-site endpoint bietet Magische Auflösung der index Dokumente (z.B. index.html, die, wie es scheint, was ist eigentlich damit an den browser zurück, in dem Beispiel, das Sie zur Verfügung gestellt), während die REST-Endpunkte nicht.
Beim konfigurieren CloudFront vor einem Eimer verwendet für Website-hosting, die Sie in der Regel nicht möchten, konfigurieren Sie die Herkunft als "S3" Herkunft indem Sie den bucket-Namen aus der drop-down-Liste; statt, die Sie konfigurieren möchten es als eine "Benutzerdefinierte" Herkunft und Verwendung der web-site-endpoint-hostname, wie in der S3-Konsole (z.B.
example-bucket.s3-website-us-east-1...
), weil sonst CloudFront meint Sie es möchten, verwenden Sie den REST-Endpunkt für den Eimer (das ermöglicht die Authentifizierung und private Inhalte, die web-site-endpoint nicht).Die Dokumentation wurde umgestaltet werden, da sich diese Frage wurde ursprünglich antwortete, so die Meldung oben erscheint nun eine Seite später, und wurde umformuliert, aber die Kernaussage ist die gleiche. Der "name des bucket" scheint zu beziehen sich auf die Möglichkeiten gezeigt, die in der drop-down -, das ist nicht, was Sie wollen.
Den Hinweis darauf, dass man mit dem REST-Endpunkt für den Eimer ist, weil die Fehlermeldung wäre nicht in XML, wenn Sie wurden über die web-site endpoint -- die web-site-endpoint zurückgegeben Fehler-Nachrichten im HTML-Format anstelle von XML.
Erstellen Sie einen neuen Ursprung für die CloudFront-Verteilung, wie beschrieben, dann das Verhalten ändern, um Anfragen zu senden, um den neuen Ursprung, dann senden Sie eine CloudFront cache-invalidation-request für
/*
und Sie sollten eingestellt werden.Siehe auch:
http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html#WebsiteRestEndpointDiff
1 zwei Endpunkten. Technisch gesehen, gibt es mehr als zwei, da alle Eimer haben mindestens zwei mögliche REST-Endpunkt Hostnamen... aber es gibt zwei Arten von Endpunkten. Die Eimer haben auch einen optionalen transfer-Beschleunigung Endpunkt, der verwendet die AWS-edge-Netz (das gleiche Infrastruktur, die Befugnisse CloudFront) für einen schnelleren/optimierten transfers, vor allem von geografischen Standorten mehr weit entfernt von der region, wo die Eimer bereitgestellt wird, aber ohne die CloudFront cache. Diesen Endpunkt sieht aus wie
https://example-bucket.s3-accelerate.amazonaws.com
wenn Sie es aktivieren, und trägt eine zusätzliche Nutzungsgebühren für die meisten Anforderungen, da Sie mehr von der AWS-Netzwerk und weniger das öffentliche Internet... aber, dass ist ein Unterschied in der hinter-den-kulissen-Bereitstellung der Endpunkt, nicht das Verhalten des endpoint. Der transfer-Beschleunigung Endpunkt ist immer noch ein REST-Endpunkt, so wie die anderen REST-Endpunkte, die es nicht über die web-site-hosting-features. CloudFront lassen Sie nicht verwenden, eine Beschleunigung Endpunkt für eine origin-domain-Namen, weil das würde keinen Sinn machen-wenn eine solche Konfiguration erlaubt, die Anfragen und Antworten würde in einer Schleife durch die AWS-Edge-Netzwerk doppelt und Erhöhung von Latenzzeiten und Kosten, ohne irgendeinen nutzen.Deployed
wenn es einige Zweifel daran, ob die änderung funktioniert nicht wie erwartet. Wenn Sie wissen, Sie haben es falsch, drücken Sie können zusätzliche änderungen ohne negative Auswirkungen. Es hilft auch, beschleunigen die Fehlerbehebung, wenn Sie Fehler, zu null-den Fehler Caching Mindest-TTLs – Fehler-Antworten zwischengespeichert werden mit unterschiedlichen Timer.Aufgetreten gleiche Problem und wie ich es behoben wurde in CloudFront Origin Einstellungen set Herkunft Domain Name zu
<website bucket>.s3-website-us-west-2.amazonaws.com
In CloudFront Generieren Einstellungen stellen Sie sicher, dass
index.html
als Standard-Root-Objekt.In der S3-stellen Sie sicher, dass Verwenden diese Eimer, eine website zu hosten ausgewählt und eingestellt
index.html
als Index Dokument./index.html
und nichtindex.html
.Finden Sie unter AWS-docs auf, wie verwenden CloudFront dienen einer statischen website gehostet auf S3 über https.
Transkribieren Inhalt unten für die Bequemlichkeit (oder im Fall, dass der link immer geht das schlecht).
Verwenden Sie die Amazon S3-Konsole zu erstellen Sie einen Eimer und aktivieren statische website-hosting auf den Eimer.
Aus der Statische website-hosting Dialogfeld kopieren die Endpunkt der Eimer ohne die führende http://. Das format ist ähnlich bucketname.s3-website-region.amazonaws.com. Sie müssen den Endpunkt in diesem format für einen späteren Schritt.
Fügen Sie einen Eimer Politik, die öffentliche lese-Zugriff zu dem Eimer, den Sie erstellt haben.
Erstellen Sie eine CloudFront-web-distribution. Werden Sie sicher, dass die folgenden Einstellungen konfigurieren:
Wenn Sie nicht wollen, um die Verwendung von SSL (HTTPS) für Ihre website, gehen Sie zum nächsten Schritt. Wenn Sie SSL verwenden möchten, um für Ihre website, können Sie wählen, Anfrage oder Importieren Sie ein Zertifikat mit ACM, um ein Zertifikat anzufordern. Weitere Informationen finden Sie unter Die Verwendung Alternativer Domain-Namen und HTTPS.
Wählen Sie Erstellen, Die Verteilung.
Update der DNS-Einträge für Ihre Domäne zu zeigen, Ihre website ' s CNAME auf Ihre CloudFront-Verteilung der domain-name. Finden Sie Ihre distribution domain-Namen in der CloudFront-Konsole in einem format, das ähnlich wie d1234abcd.cloudfront.net.
Warten, bis Ihre DNS-änderungen zu übernehmen, und für die vorherigen DNS-Einträge ablaufen.
War ich auch ein ähnliches problem
Ich habe diese Schritte befolgt, die haben dieses Problem gelöst
SCHRITTE:
Dieser Schritt hat mein Problem gelöst.
Hatte ich das problem, wenn ich versuche zu zählen der bucket-name in meiner route53-Weiterleitung für einen Kunden, zu erleichtern.e.g:
https://0832234.signin.aws.amazon.com/console/s3/?bucket=clientbucket.com
Klick auf "Alle Perioden" und gehen zurück in die clients Eimer /oder entfernen Sie den Eimer aus der url hat den trick kann ich nun herunterladen und öffnen Sie die Dateien.