Ich verwende Imagine über LIIPImagineBundle für Symfony2, um zwischengespeicherte Versionen von in S3 gespeicherten Bildern zu erstellen.So können Sie Cloudfront mitteilen, dass 302 Antworten von S3-Redirects nicht zwischengespeichert werden sollen oder wie dieses Problem bei der Bildzwischenspeicherung behoben werden kann
Gecachte Bilder werden in einem von CloudFront bereitgestellten S3 Web-aktivierten Bucket gespeichert. Allerdings ist die standardmäßige LIIPImagineBundle-Implementierung von S3 viel zu langsam für mich (prüfen, ob die Datei in S3 existiert und dann eine URL entweder für die zwischengespeicherte Datei oder für die Auflösungsfunktion erstellt), also habe ich meinen eigenen Arbeitsablauf ausgearbeitet:
- Pässe Client die Cloudfront-URL, die im Cache gespeicherte Bild sollte existieren
- Kunde das Bild über die Cloudfront URL anfordert, wenn es nicht dann die S3-bucket hat Regel eine Umleitung existiert, die 302 die Benutzer zu einem vorstellen, Umleitungen Webserver-Pfad, der die zwischengespeicherte Version der Datei generiert und an der entsprechenden Position unter S3
- Die Weiterleitung webserve 301 speichert S Der Benutzer kehrt zur URL der Cloud-Front zurück, in der das Image gespeichert ist und der Client das Image bereitstellt.
Das funktioniert gut, solange ich Cloudfront nicht verwende. Das Problem scheint zu sein, dass Cloudfront die 302-Weiterleitungsantwort zwischenspeichert (obwohl die HTTP-Spezifikation angibt, dass dies nicht der Fall sein sollte). Wenn ich also cloudfront verwende, wird der Client in einer endlosen Weiterleitungsschleife vom Webserver zur Cloudfront hin und her gesendet, und jede nachfolgende Anfrage an die Datei leitet auch dann noch an den Webserver weiter, nachdem die Datei generiert wurde.
Wenn ich S3 direkt anstelle von Cloudfront verwende, gibt es keine Probleme und diese Lösung ist solide.
Nach Amazon's documentation S3 Redirect-Regeln erlauben es mir nicht, benutzerdefinierte Header (zum Setzen von Cache-Control-Header oder dergleichen) zu spezifizieren, und ich glaube nicht, dass CloudFront erlaubt das Zwischenspeichern von Redirects zu steuern (wenn sie ist es gut versteckt). Die Ungültigkeitsoptionen von CloudFront sind so begrenzt, dass ich glaube, dass sie nicht funktionieren (kann nur 3 Objekte zu jeder Zeit ungültig machen) ... Ich könnte ein Argument an die erste Umleitung (vom Imagine-Webserver) zurückgeben, um das Endlose zu reparieren redirect (zB image.jpg? 1), aber nachfolgende Anfragen an das gleiche Objekt werden immer noch 302 zum Webserver und dann zurück zur Cloudfront, obwohl es existiert. Ich habe das Gefühl, dass es eine elegante Lösung für dieses Problem geben sollte, aber es entzieht sich mir. Jede Hilfe würde geschätzt werden !!
ha ich bin auf dem gleichen Zug wie Sie –