Risposte:
Preferisco fare un'intestazione di cache più completa, oltre ad alcune estensioni di file. Il '?' il prefisso è un segno 'non-cattura', nginx non creerà $ 1. Aiuta a ridurre il carico non necessario.
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
root
set, in quel caso dovresti aggiungere le direttive a quel blocco. (So che è in ritardo di 2 anni, ma per i futuri cittadini)
Non ho abbastanza reputazione per commentare il motivo per cui la risposta accettata non causerebbe più la visualizzazione dei file, ma l'ho capito e vorrei dare una mano!
Versione breve:
Assicurati di avere una directory root specificata per il tuo blocco di posizione sulle immagini se non ne hai uno globale!
Versione lunga di seguito:
Innanzitutto, il mio metodo di implementazione di questa soluzione è stato molto simile a questa risposta , in cui scrivi la regola (come nella risposta accettata):
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
in un file img-cache.conf
e quindi includi quel file nella tua server {...}
direttiva.
Il mio esempio di somesite.com nella cartella dei miei siti disponibili:
#Image Caching
include /etc/nginx/conf/img-cache.conf;
In questo modo è possibile aggiungere il blocco della posizione della memorizzazione nella cache delle immagini a più siti in esecuzione.
In secondo luogo, ho una situazione in cui my / var / www / contiene due cartelle che consento come public_html - sicure e di formazione, quindi devo creare blocchi di posizione specifici nella direttiva server del mio sito individuando queste cartelle.
Come tale, non ho un set di directory radice globale .
Quindi, quando crei i blocchi di posizione delle immagini, potresti non fornire loro una directory principale da cui cercare le immagini!
La mia soluzione era quindi di:
location ~ ^/training.+\.(?:ico|css|js|gif|jpe?g|png)$ {
root /var/www/;
expires 7d;
add_header Pragma public;
add_header Cache-Control "public";
try_files $uri 404;
}
location ~ ^/.+\.(?:ico|css|js|gif|jpe?g|png)$ {
root /var/www/secure;
expires 7d;
add_header Pragma public;
add_header Cache-Control "public";
try_files $uri 404;
}
.conf
. La cartella appropriata nginx/1.14.0 (Ubuntu)
sembra essere /etc/nginx/snippets/
.
È inoltre possibile impostare la scadenza al massimo. Ecco la direttiva che uso per css e js.
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
Tutte le soluzioni sopra menzionate negheranno la possibilità di avere alias diversi per percorsi diversi. Inoltre, per avere tutte le diverse scadenze della cache in un unico posto, dovresti usare nginx map nel modo seguente.
...
# Expires mappings
map $sent_http_content_type $expires {
default off;
text/html epoch;
text/css max;
application/javascript 7d;
~image/ max;
}
...
server {
listen ...;
expires $expires;
location /assets/ {
# It is now possible to serve some resources from different path
alias /var/www/my_other_path/
}
# and have them all have same expirations
location / {
try_files $uri $uri/ /index.html;
}
...
}
Off
disabilita la memorizzazione nella cache, epoch
(per l'epoca unix) risulta sempre il recupero della risorsa, max
imposta la data sul valore massimo del browser.
L'immagine ~ / corrisponde a qualsiasi tipo di immagine.
Maggiori informazioni sulle mappe nginx su http://nginx.org/en/docs/http/ngx_http_map_module.html .
$sent_http_content_type
è "text/css;charset=UTF-8"
l'espressione sopra fallirà.
Se hai un posto che ospita tutti i tuoi file statici, qualcosa del genere farà ...
location /static {
your/location/to/static/files/static;
expires 30d;
add_header Cache-Control "public";
}
La risposta accettata ha fatto sì che nginx non trovasse nessuno dei miei file statici. Non so davvero perché, ma questa è una semplice alternativa.
/static
cartella (qualunque cosa tu abbia impostato in posizione) alla fine dell'alias (subito dopo .../files
nell'esempio).
Dal momento che questo è un thread molto vecchio, e ho trovato un fantastico tutorial aggiornato.
Forse vuoi verificarlo