[Solved] Caching in NGINX

Started by hbc, April 24, 2020, 02:42:31 PM

Previous topic - Next topic
April 24, 2020, 02:42:31 PM Last Edit: April 27, 2020, 02:38:52 PM by hbc
What is the trick to get caching in NGINX active?

I created a cache folder:

proxy_cache_path /var/cache/lighttpd levels=1:2 keys_zone=209ab9ff8560484caaf081f8bcac9c2d:10m max_size=1g inactive=10m use_temp_path=off;

(lighthttpd runs as same www user like nginx, rights should fit and folder already existed)

I added caching to location:

location  / {
    SecRulesEnabled;
    LearningMode;
    BasicRule wl:19;
    CheckRule "$policy4434ab68a29c40a2ba8165bb0152726b >= 8" BLOCK;
    CheckRule "$policye1e33beefff64c3aac540aa206da52c4 >= 8" BLOCK;
    CheckRule "$policy005d90775be94cdfb326ff4249e5c949 >= 8" BLOCK;
    CheckRule "$policy6dbf193648204b3f9da750d19b0dfd14 >= 8" BLOCK;
    CheckRule "$policy30b8fbbed9854f1eb42a19353326f25e >= 8" BLOCK;
    CheckRule "$policy9c0c9f9ad1b44a52b52ca20418d980dc >= 8" BLOCK;
    DeniedUrl "/waf_denied.html";
    autoindex off;
    http2_push_preload on;
    proxy_set_header Host $host;
    proxy_cache 209ab9ff8560484caaf081f8bcac9c2d;
    proxy_cache_use_stale  error timeout invalid_header updating http_429 http_500 http_502 http_503 http_504;
    proxy_cache_min_uses 10;
    proxy_cache_background_update on;
    proxy_cache_lock on;
    proxy_cache_revalidate on;
    proxy_cache_methods GET HEAD;
    proxy_set_header X-TLS-Cipher $ssl_cipher;
    proxy_set_header X-TLS-Protocol $ssl_protocol;
    proxy_set_header X-TLS-SNI-Host $ssl_server_name;
    # proxy headers for backend server
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-TLS-Client-Intercepted $tls_intercepted;
    proxy_ignore_client_abort off;
    proxy_request_buffering on;
    proxy_max_temp_file_size 1024m;
    proxy_buffering on;
    proxy_pass http://upstreambcd9e05221ad4fb3852fb408c4fe5030;
    proxy_hide_header X-Powered-By;
    proxy_hide_header Referrer-Policy;
    proxy_hide_header X-XSS-Protection;
    proxy_hide_header X-Content-Type-Options;
    proxy_hide_header Strict-Transport-Security;
    proxy_hide_header Content-Security-Policy;
    proxy_hide_header Content-Security-Policy-Report-Only;

}


The caching directory stays empty. :-(
Intel(R) Xeon(R) Silver 4116 CPU @ 2.10GHz (24 cores)
256 GB RAM, 300GB RAID1, 3x4 10G Chelsio T540-CO-SR

Was sagt denn dein Server bezüglich caching?

Ich hab jetzt keine explizite no-cache Anweisung gefunden. Also wäre die Konfiguration soweit korrekt?
Ich hatte noch versucht proxy_cache_valid 5m einzufügen, da ich gelesen hatte, das dies evtl. der Grund ist, aber das Verzeichnis bleibt leer.

Es werden ja nicht mal die zwei Level Cache-Verzeichnisse angelegt. Oder geschieht dies erst beim Speichern der ersten Datei? Oder wie muss man sich das mit den Levels vorstellen. Dachte es sähe wenigstens so aus, wie bei squid, wenn man dort mit squid -z die Cache-Verzeichnisse anlegt.
Intel(R) Xeon(R) Silver 4116 CPU @ 2.10GHz (24 cores)
256 GB RAM, 300GB RAID1, 3x4 10G Chelsio T540-CO-SR

Ist seltsam, weil eigentlich die zwei Direktiven die du hast, ausreichen sollten:

https://docs.nginx.com/nginx/admin-guide/content-cache/content-caching/


       
  • proxy_cache
  • proxy_cache_path

Würde nginx denn mit dieser Konfiguration und bei Start dann bereits leere Verzeichnis über zwei Level erstellen, um dort gehashed dann Dateien abzulegen oder bleibt Verzeichnis solange komplett leer bis erste Datei gecached wird
Das würde mir beim Testen schon mal helfen, weil wenn er entsprechende Verzeichnisse izn CacheDir anlegen sollte, dann brauche ich gar nicht erst in Browser testen, wenn diese nach Reload der Konfiguration fehlen.
Intel(R) Xeon(R) Silver 4116 CPU @ 2.10GHz (24 cores)
256 GB RAM, 300GB RAID1, 3x4 10G Chelsio T540-CO-SR

Jetzt hat mir endlich nginx die Cacheverzeichnisse angelegt. Scheinbar tut er das nicht von Anbeginn, sondern erst, sobald die erste Datei gecached werden soll. Und das geschah erst nachdem oft genug die Datei angefragt wurde (proxy_cache_min_uses 10).
Hab am Upstreamserver deflate/gzip aktiviert und getestet und irgendwann war das Cacheverzeichnis gefüllt. Nehme mal an, das es ja nichts ausmacht, ob der Upstream mit oder deflate/gzip läuft.
Intel(R) Xeon(R) Silver 4116 CPU @ 2.10GHz (24 cores)
256 GB RAM, 300GB RAID1, 3x4 10G Chelsio T540-CO-SR

Ich lade mehrere Kompressoren. Der nginx auf OPNsense kann auch Brotli, was auch Firefox und Chrome supported. Das komprimiert noch ne Stufe besser.

Auch wenn nginx nur reverse proxy ist? Dann kann er dennoch komprimieren? Hatte so Option gesucht. Dann könnte Upstream normal über Port 80 unkomprimiert senden und nginx komprimiert und schickt per HTTP/2 und TLS raus
Intel(R) Xeon(R) Silver 4116 CPU @ 2.10GHz (24 cores)
256 GB RAM, 300GB RAID1, 3x4 10G Chelsio T540-CO-SR