2016-12-11 3 views
0

Ich erstelle einfache Seite, wo viele Bilder. Alle Bilder werden auf Remote-Provider gehostet (gehostet auf Objektspeicher und ich habe nur Links zu allen Bildern) Um www zu beschleunigen möchte ich Lack verwenden, um diese Bilder zu cachen, aber ich habe ein Problem:
Alle Bilder werden mit https, so serviert Ich habe Haproxy verwendet, um ssl zu beenden und den nächsten Verkehr zu lackieren, aber wie man in der Lackwebsiteadresse abbildet, die für Endbenutzer wie https://www.website.com/picture.jpg mit entfernter Adresse sichtbar sein sollte, wo Bild gehostet wird (https://www.remotehostedpictures.com/picture.jpg). Also, im Endergebnis muss der Benutzer den ersten Link sehen, die Remote-Adresse remotehostedpictures.com/picture.jpg kann nicht sichtbar sein.Cache-Bilder von Remote-Server mit Lack

+0

Erstens, bitte verwenden Sie nicht andere Leute Domain-Namen als Platzhalter. http://example.com, http://example.net und http://example.org werden speziell für diesen Zweck zugewiesen. Zweitens, was ist das Problem, das Sie haben? Ich frage, denn was Sie als das gewünschte Verhalten beschreiben, ist, wie HAProxy und Varnish funktionieren. Das ist das erwartete Verhalten. Wenn Sie example.com → HAProxy → Varnish → example.net (Inhaltsquelle) haben, wären die Links und die Adresse example.com. –

+0

Ich weiß, wie es mit der Verwendung haproxy (Proxy-Pass) zu tun, aber ich weiß nicht, wie in Lack. Vielleicht könnte jemand ein einfaches Konfigurationsbeispiel in Lack teilen? – stefek143

Antwort

0

In Ihrem Lack vcl_recv sollten Sie Ihre Anfrage host Header ändern, dann müssen Sie remotehostedpictures.com als Ihr Backend erklären.

Am Ende sollten Sie so etwas wie dieses (Code nicht getestet)

sub vcl_recv { 
    if (req.url ~ "\.jpg") { 
    set req.http.host = "www.remotehostedpictures.com"; 
    set req.backend_hint = remote_host; 
    } 
} 

backend remote_host { 
    .host = "www.remotehostedpictures.com"; 
    .port = "80"; 
} 

By the way, passen sie von dns in backend.host haben. Wenn die DNS auf mehrere IPs aufgelöst wird, wird der erste verwendet. Die Auflösung der DNS erfolgt zur Zeit der Kompilierung. Wenn sich die DNS ändert, sollten Sie Ihren vcl neu laden.

+0

Thx, fast Arbeit, aber wenn ich www.website.com/directory/picture.jpg tippe, dann sehe ich 404 nicht gefunden. Der Pfad zur Datei in remote_host sieht gleich aus: www.remotehostedpictures.com/directory/picture.jpg. So wird der Pfad zur Datei nicht zugeordnet. – stefek143

+0

Wenn Sie beim Anfordern Ihrer Bilder das Lacklog ausführen. Was ist die Ausgabe? –

0

Ich denke, das Speichern von Bildern in Varnish ist keine gute Idee, denn als Varnish wird den ganzen Widder schnell füllen (wenn Sie viele Bilder haben), als wenn Varnish voll ist, bereinigt es den gesamten Cache, stellen Sie sich vor, was auf dem Server passiert Wenn der gesamte Cache gelöscht wurde und Sie auf Ihrer Seite Traffic haben.

Vor einiger Zeit mache ich einen solchen Cache in Varnish und nach ein paar Stunden lebe ich deaktivieren Bilder zwischenspeichern wegen der Säuberung (für mich am wichtigsten Caching Seiteninhalt).

In solchen Situationen ist die beste Lösung CDN. Sie können externe Dienste wie Cloudflare verwenden oder einfache CDNs auf Nginx erstellen (die nur statische Dateien mit dem Expired-Header versorgen).

Hoffe es hilft :)

Verwandte Themen