Für Website-ähnliche Funktionen in S3, wie z. B. Weiterleitungen, HTML-Fehlermeldungen und Indexdokumente, können Sie den REST-Endpunkt ( ${bucket_name}.s3.amazonaws.com
oder ${bucket_name}.s3.${region}.amazonaws.com
) nicht verwenden, da diese Funktionen nur von den Website-Endpunkten ( ${bucket_name}.s3-website.${region}.amazonaws.com
) bereitgestellt werden .
http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html
Um das Verhalten in Cloudfront verfügbar zu machen, müssen Sie Cloudfront so konfigurieren, dass auch dieser Endpunkt verwendet wird, nicht der REST, der über die automatische Vervollständigung in der Konsole angeboten wird.
Geben Sie den Hosting-Endpunkt für die statische Amazon S3-Website für Ihren Bucket ein. Dieser Wert wird in der Amazon S3-Konsole auf der Seite Eigenschaften unter Statisches Website-Hosting angezeigt .
Wenn Sie den Bucket-Namen in diesem Format angeben, können Sie Amazon S3-Weiterleitungen und benutzerdefinierte Amazon S3-Fehlerdokumente verwenden.
http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistS3AndCustomOrigins.html
Beachten Sie, dass die Webendpunkte HTTPS nicht unterstützen. Sie können Cloudfront jedoch so konfigurieren, dass es mit HTTP aus dem Bucket abgerufen wird, obwohl die Clientverbindung HTTPS ist.
Hilfreicher Tipp: Bei der Fehlerbehebung und beim Testen von Änderungen mit CloudFront sind Benutzer häufig verwirrt über die offensichtliche "Latenz" zwischen dem Vornehmen von Änderungen und dem Beginn des neuen Verhaltens von CloudFront. Bei Fehlerseiten verfügt CloudFront über eine standardmäßige 5-Minuten- Fehler-Caching-Mindest-TTL , die verhindert, dass Anforderungen für fehlgeschlagene Seiten erneut an den Ursprung gesendet werden. Dies ist ein separater Zeitgeber von der im Cache-Verhalten festgelegten minimalen / Standard- / maximalen TTL . Insbesondere beim Testen möchten Sie diese Timer möglicherweise deaktivieren und bei jeder nachfolgenden Anforderung von Seiten, die Fehler zurückgegeben haben, einen erneuten Versuch erzwingen. Verwenden Sie dazu die Schritte, die ich in der Antwort auf eine Frage zur offensichtlichen Amazon CloudFront-Latenz angegeben habe .
S3OriginConfig
Achten Sie darauf, param nicht einzuschließen, wenn Sie das festlegenOrigins
und stattdessen verwendenCustomOriginConfig
. Scheint offensichtlich, hat mich aber für eine Weile erwischt :)Ich hatte das gleiche Problem mit fehlgeschlagenen Weiterleitungen und heruntergeladenen Dateien mit der Länge Null, verwendete jedoch keine Cloudfront.
Die Hauptursache in meinem Fall war, dass mein DNS-CNAME-Eintrag auf den REST-Endpunkt (static.righto.com.s3-us-west-2.amazonaws.com) anstelle des Website-Endpunkts (static.righto.com.s3- Website) verwies -us-west-2.amazonaws.com). Durch das Aktualisieren des CNAME-Datensatzes wurden meine Weiterleitungen behoben.
Ein weiteres Symptom für dieses Problem war, dass fehlende Seiten eine XML-Fehlerseite anstelle einer HTML-Fehlerseite zeigten.
In diesem Dokument wird der Unterschied zwischen Website-Endpunkten und REST-Endpunkten erläutert.
quelle
Wenn Sie hierher kommen, um eine Lösung zu finden, ohne CloudFront zu verwenden, finden Sie hier:
Sie können s3cmd (natürlich im Bash-Skript) und seine Parameter verwenden:
--add-header
mitx-amz-website-redirect-location
Dieses Skript löst beispielsweise das Problem für die Seite
/about/
:Dieses Skript kopiert eine vorhandene Datei mit einem neuen Dateinamen ohne abschließenden Schrägstrich. Es ist nicht wichtig, was die Datei enthält, da der Browser sofort umgeleitet wird.
Wenn Sie (und wichtigere Webcrawler ) versuchen, eine Seite zu öffnen, zu der
/about
Sie301
weitergeleitet werden/about/
. Dies ermöglicht es, die richtige Seite im Cache von Google, Yandex und anderen Suchmaschinen zu halten.Sie können diesen Code für mehrere Seiten wiederholen. Oder Sie können Funktionen zum Durchsuchen von Ordnern hinzufügen und für jeden einen Anruf tätigen. Wahrscheinlich wirst du es so nett sein, es hier zu zeigen :)
quelle