J'ai mis en cache activé sur un proxy Nginx.
Comme je le comprends, tant que je n'ignore pas le Cache-Control
en-tête dans ma configuration proxy (proxy_ignore_headers
), le temps de cache avant l'expiration peut être défini à partir du serveur d'origine à l'aide de Cache-Control
= max-age=XXXX
.
Mais quel serait le temps de cache par défaut qu'il conserverait et utiliserait pour quelque chose comme Cache-Control: public
? Existe-t-il un moyen de définir une heure de cache maximale par défaut pour ces ressources?
Vous seriez probablement mieux éteint de régler ou de réécrire les en-têtes de contrôle du cache à l'intérieur de Nginx. J'ai un tutoriel sur ceci ici , et la première partie du tutoriel a des fichiers de configuration téléchargeables. Les parties clés sont ci-dessous
Vous avez besoin Headers_Plus pour que cela fonctionne. Certaines distributions incluent ceci, certaines non et vous devez construire à partir de la source - ce qui est assez facile et est inclus dans mon tutoriel.
copié du tutoriel
Nous utilisons quelques techniques différentes pour définir des en-têtes de contrôle de cache. Tout d'abord, nous supprimons les en-têtes existants, comme le très ancien pragma qui n'est plus utile, le nettoyage expire les en-têtes (ce qui est probablement inutile car nous les définissons plus tard) et nous effacons le nom du serveur pour la sécurité.
more_clear_headers "Pragma"; more_clear_headers Server; more_clear_headers "Expires";
Ensuite, nous pouvons régler l'en-tête manuellement. Pour l'image, nous utilisons une longue période d'expiration
add_header Cache-Control "public, max-age=691200, s-maxage=691200";
Pour les pages, nous le gardons plus court - de nombreux sites auront besoin de beaucoup plus court
add_header Cache-Control "public, max-age=86400, s-maxage=86400";
Dans certains endroits, nous utilisons un format alternatif, pour une commodité.
expires 8d;
Exemple de configuration NGinx
Un exemple de serveur Nginx (avec certaines parties manquant comme SSL Configuration)
# Caching. Putting the cache into /dev/shm keeps it in RAM, limited to 10MB, for one day.
# You can move to disk if you like, or extend the caching time
fastcgi_cache_path/dev/shm/nginxcache Niveaux = 1: 2 keys_zone = cache: 50m inactif = 1440m; #RAM
# This needs to match your PHP configuration. Port is sometimes 9000 ****
upstream php {
server 127.0.0.1:9001;
}
server {
server_name www.example.com;
listen 443 ssl http2;
root /var/www/***folder;
location ~* \.(jpg|jpeg|png|gif|css|js|ico|svg)$ {
log_not_found off; access_log off;
# Set up caching - 8 days for static resources
# Remove the old unnecessary Pragma and hide the server version
more_clear_headers "Cache-Control";
add_header Cache-Control "public, max-age=691200, s-maxage=691200";
more_clear_headers Server; more_clear_headers "Pragma"; mo re_clear_headers "Expires";
}
# PHP requests
location ~ \.php$ {
fastcgi_keep_conn on;
fastcgi_intercept_errors on;
fastcgi_pass php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# Use the cache defined above. Cache 200 (success) status's, for 24 hours, and cache
# specific other status's for an hour. This helps mitigate DDOS attacks.
# Only cache GET and HEAD requests
fastcgi_cache CACHE;
fastcgi_cache_valid 200 1440m;
fastcgi_cache_valid 403 404 405 410 414 301 302 307 60m;
add_header X-Cache $upstream_cache_status;
fastcgi_cache_methods GET HEAD;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
# Set the cache control headers we prepared earlier. Remove the old unnecessary Pragma and hide
# the server version. Clearing existing headers seems necessary
more_clear_headers "Cache-Control";
add_header Cache-Control $cacheControl;
more_clear_headers "Pragma"; more_clear_headers Server; more_clear_headers "Expires";
}
}
C'est vrai, par défaut, avec juste proxy_cache
configuré, Nginx ne cache que les réponses qui ont max-age
défini dans le Cache-Control
entête.
Sans aucun Cache-Control
en-tête ou juste Cache-Control: public
nginx ne cache pas la réponse (c'est-à-dire que vous obtenez chaque fois X-Cache-Status: MISS
Lorsque vous configurez également add_header X-Cache-Status $upstream_cache_status;
).
Vous pouvez configurer une heure de mise en cache par défaut pour les réponses sans Cache-Control
en-tête ou ceux sans max-age
champ dans un Cache-Control
entête:
# for 200, 301, 302 responses
proxy_cache_valid 10m;
# for all other responses
proxy_cache_valid any 1m;
Cela signifie un Cache-Control
L'en-tête a priorité sur un proxy_cache_valid
réglage et il n'y a pas de valeur par défaut pour proxy_cache_valid
.