nginx pas de réglage expire en-têtes actifs sur Rails statiques
-
22-08-2019 - |
Question
Je ne peux pas sembler obtenir nginx à mettre expire en-têtes sur mes actifs statiques dans mon application Rails.
Mon application est déployée à l'aide Phusion passagers et nginx.
est inférieure à la section correspondante de mon nginx fichier de configuration
server {
listen 80;
server_name my.domain.tld;
root /home/deploy/my.domain.tld/current/public;
passenger_enabled on;
access_log off;
location ~* \.(ico|css|js|gif|jp?g|png)\?[0-9]+$ {
expires max;
break;
}
if (-f $document_root/system/maintenance.html) {
rewrite ^(.*)$ /system/maintenance.html break;
}
}
Je ne sais pas pourquoi son pas de réglage expire en-têtes sur mes actifs statiques (par exemple /images/foo.png?123456)
Je ne sais pas si elle a quelque chose à voir avec passager ou si mon emplacement regexp est tout simplement pas attraper
La solution 2
Alors j'ai fini par trouver la solution. Mon regexp était un peu loin, que je ne prenais pas en compte la possibilité que le? Timestamp n'existait pas.
Cette expression rationnelle a fonctionné pour moi.
location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ {
Autres conseils
Je voulais juste souligner que le fait de l'horodatage en option est une mauvaise idée -. Si ce n'est pas inclus, alors la mise est faux comme expires max
il n'y aurait aucun moyen de rafraîchir le fichier
En outre, la directive en Nginx peut location
ne pas voir la chaîne de requête, de sorte que la solution affichée ici correspond à jamais l'horodatage « option ».
Une solution appropriée (c.-à-un qui envoie le maximum expire que lorsque le fichier a été demandé avec un horodatage) serait:
location ~* \.(js|css|png|jpg)$ {
if ($query_string ~ "^[0-9]+$") {
expires max;
break;
}
}
Si l'horodatage n'est pas spécifié, vous comptez sur et Last-Modified
ETag
, qui sont traités automatiquement par Nginx.
Peut-être que cela vous aidera:
location ~* ^.*\.(ico|css|js|gif|jp?g|png)\?[0-9]+$ {
lire également comment Nginx évalue l'emplacement . Êtes-vous sûr que vous n'avez pas une autre chaîne dans votre fichier location
de configuration qui correspond à vos ressources statiques avant regexp ne if (-f $document_root/...)
?
BTW, pensez à utiliser try_files au lieu de <=>.
il n'y a pas besoin d'utiliser la directive « casser », mais access_log au large; sera utile:
location ~* \.(png|gif|jpg|jpeg|css|js|swf|ico)(\?[0-9]+)?$ {
access_log off;
expires max;
add_header Cache-Control public;
}
vous pouvez voir fichier complet de configuration à github: https://gist.github.com/711913