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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top