Nginx Reverse Proxy, wann Cache vs Store verwenden?

8

Ich bin dabei, den Web-Stack meines Projekts auf Nginx -> Haproxy -> viele (Apache / Passenger Rails) Instanzen umzustrukturieren

Einige der Ziele sind:

  • einzelner Speicherort für das Zwischenspeichern von Seiten (derzeit über Rails auf jedem Apache-Computer)
  • schnellerer statischer Inhalt
  • ssl aus der internen Pipeline entfernen
  • IP-Protokollierung (zuvor verloren, weil Haproxy im TCP-Modus ausgeführt wird)

Die Bild- / Stylesheet- / Javascript-Assets werden mit entsprechenden Headern zwischengespeichert. Unser Seiten-Caching basiert auf internen Parametern und sollte nicht auf typische Cache-Steuerelemente reagieren. Um diese Ziele zu erreichen, sieht unsere Konfiguration ungefähr so ​​aus

server {

    ...

    location /really_slow_dynamic_content/ {
        root /var/www/tmp;
        error_page 404 = @fetch;
    }

    location @fetch {
        internal;
        proxy_pass   haproxy_ip;
        proxy_store  /var/www/tmp${uri}_cache.html;
        proxy_store_access  user:rw  group:rw  all:r;
    }

    location /assets/ {
        proxy_pass   haproxy_ip;
        proxy_cache  assets;
    }

    location / {
        proxy_pass   haproxy_ip;
    }
}

Ich bin nicht wirklich ein Systemadministrator, und ich weiß, dass es viele Alternativen / Optimierungen / Ergänzungen gibt, die hilfreich sein könnten. Ich verstehe auch den Unterschied zwischen proxy_cache und proxy_store nicht ganz. Also zu meiner eigentlichen Frage ...

Ist es sinnvoll, proxy_cache für Assets und proxy_store für langsame dynamische Inhalte zu verwenden, bis wir die Assets auf den Nginx-Computer verschieben?

Auch wenn es andere Überlegungen oder Software gibt, die ich in Betracht ziehen sollte, würde ich gerne davon hören. Vielen Dank!


Seit ich diese Frage gestellt habe, habe ich festgestellt, dass die ursprüngliche Konfiguration, die ich verwendet habe, den Store überhaupt nicht verwendet und dass die error_page und die internen Einstellungen aus dem (halb?) Offiziellen Wiki-Beispiel nicht genau optional waren (Konfiguration hier seitdem aktualisiert) es scheint zu funktionieren und eine funktionierende Konfiguration scheint ein besseres Erbe für diese Frage zu sein. Die Verwendung des Speichers für langsame (und selten aktualisierte) vollständige Seiten und den eigentlichen Cache für Bilder, Javascript und dergleichen scheint für uns ziemlich gut zu funktionieren. Ich werde die eine Antwort akzeptieren, da sie mir zumindest einen Anhaltspunkt gab, um mein Problem aufzuspüren, aber ich habe immer noch keine Ahnung, ob ich die beiden Richtlinien auf eine Weise verwende, für die sie bestimmt waren oder nicht oder nicht (zumindest nicht in Bezug auf den Speicher, der Cache scheint etwas offensichtlicher zu sein).

Chris
quelle
Für Legacy-Zwecke war diese Diskussion für mich sehr hilfreich, wenn ich mich mit diesen Themen befasste. ruby-forum.com/topic/140396
Chris

Antworten:

3

Wenn der Speicher mir richtig dient, speichert proxy_store eine binäre Darstellung einer Anforderung für ein Element, während proxy_cache eine zwischengespeicherte Kopie des Elements in seiner Basisform speichert.

proxy_cache ist eigentlich eine richtige Caching-Engine mit mehreren Ebenen und eignet sich zum Speichern von Inhalten von mehreren Websites mit denselben Schlüsseln.

Ich persönlich verwende proxy_cache, um über 2 Milliarden Produktbilder auf jedem unserer statischen Inhaltsserver zu speichern.

Kura
quelle
1

proxy_store wird verwendet, um einen On-Demand-Spiegel von Objekten zu erstellen. Elemente werden in denselben Pfad eingefügt, in dem sich das angegebene Element im Backend befindet.

Bei langsamen dynamischen Inhalten ist proxy_cache besser geeignet, da es das Ablaufen des Caches unterstützt.

Ein Beispiel dafür, wo proxy_store nützlicher ist, könnte ein Spiegel von RPM-Dateien sein, bei denen ein Dateiname / eine Version niemals abgelaufen sein muss .

Luke Chadwick
quelle