Antworten:
Ich bevorzuge es, einen vollständigeren Cache-Header zu erstellen, zusätzlich zu einigen weiteren Dateierweiterungen. Das '?' Das Präfix ist eine nicht erfassende Markierung. Nginx erzeugt keine 1 $. Es hilft, unnötige Belastung zu reduzieren.
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
root
Menge. In diesem Fall sollten Sie die Direktiven zu diesem Block hinzufügen. (Ich weiß, dies ist 2y spät, aber für zukünftige Bürger)
Ich habe nicht genug Ruf, um zu kommentieren, warum die akzeptierte Antwort dazu führen würde, dass die Dateien nicht mehr angezeigt werden, aber ich habe es herausgefunden und möchte helfen!
Kurzfassung:
Stellen Sie sicher, dass Sie ein Stammverzeichnis für Ihren Standortblock auf Bildern angegeben haben, wenn Sie kein globales Verzeichnis festgelegt haben!
Lange Version unten:
Zuallererst war meine Methode zum Implementieren dieser Lösung der folgenden Antwort sehr ähnlich , in der Sie die Regel schreiben (wie in der akzeptierten Antwort):
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
in eine Datei img-cache.conf
und fügen Sie diese Datei dann in Ihre server {...}
Direktive ein.
Mein Beispiel für somesite.com in meinem für Websites verfügbaren Ordner:
#Image Caching
include /etc/nginx/conf/img-cache.conf;
Auf diese Weise können Sie den Image-Caching-Speicherortblock mehreren Sites hinzufügen, die Sie möglicherweise ausführen.
Zweitens habe ich eine Situation, in der mein / var / www / zwei Ordner enthält, die ich als public_html zulasse - sicher und trainierend. Daher muss ich in der Server-Direktive meiner Site bestimmte Standortblöcke erstellen, in denen diese Ordner herausgegriffen werden.
Als solches habe ich kein globales Stammverzeichnis festgelegt .
Wenn Sie also Ihre Image-Speicherorte sperren, stellen Sie ihnen möglicherweise kein Stammverzeichnis zur Verfügung, in dem Sie nach den Images suchen können!
Meine Lösung war dann:
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
. Der entsprechende Ordner in nginx/1.14.0 (Ubuntu)
scheint zu sein /etc/nginx/snippets/
.
Sie können das Ablaufdatum auch auf Maximum setzen. Hier ist die Direktive, die ich für CSS und JS benutze.
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
Alle vorgenannten Lösungen werden die Möglichkeit verweigern, unterschiedliche Aliase für unterschiedliche Pfade zu haben. Um alle Ihre unterschiedlichen Cache-Verfallszeiten an einem Ort zu haben, sollten Sie nginx map auf folgende Weise verwenden.
...
# 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
Deaktiviert die Zwischenspeicherung epoch
(für Unix-Epochen), führt dazu, dass die Ressource immer neu abgerufen wird, und max
setzt das Datum auf den maximalen Wert des Browsers.
Das ~ Bild / entspricht einem beliebigen Bildtyp.
Weitere Informationen zu nginx maps finden Sie unter http://nginx.org/en/docs/http/ngx_http_map_module.html .
$sent_http_content_type
ist "text/css;charset=UTF-8"
der obige Ausdruck fehlschlagen.
Wenn Sie einen Ort haben, an dem all Ihre statischen Dateien gespeichert sind, ist so etwas ausreichend ...
location /static {
your/location/to/static/files/static;
expires 30d;
add_header Cache-Control "public";
}
Die akzeptierte Antwort führte dazu, dass nginx keine meiner statischen Dateien fand. Ich weiß nicht genau warum, aber das ist eine einfache Alternative.
/static
Ordner (was auch immer du als Speicherort festgelegt hast) am Ende des Alias hinzufügst (direkt danach .../files
im Beispiel).
Da dies ein sehr alter Thread ist und ich ein aktuelles tolles Tutorial gefunden habe.
Vielleicht möchten Sie es ausprobieren
Implementieren von Browser-Caching mit dem Nginx-Header-Modul unter Ubuntu 16.04