Réponses:
Je préfère créer un en-tête de cache plus complet, ainsi que d'autres extensions de fichiers. Le '?' Le préfixe est une marque «non capturante», nginx ne créera pas de $ 1. Cela aide à réduire la charge inutile.
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
root
ensemble. Dans ce cas, vous devez ajouter les directives à ce bloc. (Je sais que c'est 2y en retard, mais pour les futurs citoyens)
Je n'ai pas assez de réputation pour dire pourquoi la réponse acceptée ferait en sorte que les fichiers ne s'affichent plus, mais je l'ai compris et je voudrais aider!
Version courte:
Assurez-vous de disposer d'un répertoire racine spécifié pour votre bloc d'emplacement sur les images si vous n'en avez pas un global.
Version longue ci-dessous:
Tout d'abord, ma méthode d'implémentation de cette solution était vraiment similaire à cette réponse , où vous écrivez la règle (comme dans la réponse acceptée):
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
dans un fichier img-cache.conf
et ensuite inclure ce fichier dans votre server {...}
directive.
Mon exemple de somesite.com dans mon dossier sites-available:
#Image Caching
include /etc/nginx/conf/img-cache.conf;
De cette façon, vous pouvez ajouter le bloc d’emplacement de mise en cache d’images à plusieurs sites que vous exécutez.
Deuxièmement, je suis dans une situation où mon / var / www / contient deux dossiers que j’autorise en tant que public_html - secure et training. Je dois donc créer des blocs d’emplacement spécifiques dans la directive serveur de mon site en distinguant ces dossiers.
En tant que tel, je n'ai pas de répertoire racine global .
Ainsi, lorsque vous créez des blocs d’emplacement d’image, il se peut que vous ne leur fournissiez pas de répertoire racine dans lequel rechercher les images!
Ma solution était alors de:
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
. Le dossier approprié nginx/1.14.0 (Ubuntu)
semble être /etc/nginx/snippets/
.
Vous pouvez également définir l'expiration au maximum. Voici la directive que j'utilise pour css et js.
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
Toutes les solutions mentionnées ci-dessus nieront la possibilité d'avoir différents alias pour différents chemins. De même, afin d’avoir toutes vos différentes expirations de cache au même endroit, vous devez utiliser nginx map de la manière suivante.
...
# 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
désactive la mise en cache, epoch
(pour l'époque unix), la ressource est toujours extraite, max
définit la date sur la valeur maximale du navigateur.
La ~ image / correspond à tous les types d'image.
Pour plus d'informations sur les cartes nginx, visitez http://nginx.org/en/docs/http/ngx_http_map_module.html .
$sent_http_content_type
est "text/css;charset=UTF-8"
l'expression ci-dessus va échouer.
Si vous avez un endroit qui abrite tous vos fichiers statiques, quelque chose comme ça fera l'affaire ...
location /static {
your/location/to/static/files/static;
expires 30d;
add_header Cache-Control "public";
}
La réponse acceptée a empêché nginx de trouver aucun de mes fichiers statiques. Vous ne savez pas vraiment pourquoi, mais c'est une alternative simple.
/static
dossier (quel que soit l'emplacement que vous avez défini) à la fin de l'alias (juste après .../files
dans l'exemple).
Comme il s’agit d’un très vieux fil de discussion, j’ai trouvé un excellent tutoriel à jour.
Peut-être que vous voulez vérifier