2009-10-22 10 views
1

J'ai une application Rails qui génère beaucoup d'images; c'est-à-dire qu'un contrôleur d'images avec une action show extrait une image d'un SAN et la sert. J'ai une caches_page sur ceci qui enregistre de manière fiable une copie du fichier dans un emplacement personnalisé; RAILS_ROOT +/public/cache. Les fichiers sont là et ont l'air bien. Je suis au service de l'application via nginx et il semble bien fonctionner, mais pour la vie de moi, je ne peux pas l'obtenir pour envoyer ces fichiers image en cache au lieu de frapper l'action des rails. Je suis assez nouveau à nginx et je fais des recherches depuis un certain temps mais peu importe ce que j'essaie, ça ne marche pas - je fais quelque chose de fondamentalement faux.Configurer nginx pour servir des images mises en cache

Pour clarifier, j'ai une uri comme ceci:

/images/show/123.jpg 

le fichier peut exister ici:

/cache/images/show/123.jpg 

Comment puis-je faire nginx servir ce fichier et non transmettre la demande?

Voici une liste non exhaustive de ce que j'ai essayé:

if (-f /cache$request_filename) { 
    rewrite (.*) /cache$1 break; 
    break; 
} 

if (-f /cache$uri.jpg) { 
rewrite (.*) /cache$1.jpg break; 
} 

if (-f /cache/images/show/$request_filename) { 
rewrite (.*) /cache/images/show/$1.jpg break; 
} 

Toutes les idées?

mise à jour: J'ai répondu à ma propre question. La règle correcte était:

 if (-f $document_root/cache$request_uri) { 
     rewrite (.*) /cache$1 break; 
     } 
+0

http://serverfault.com/questions/262995/how-do-i-dry-up-this-nginx -configuration/263854 # 263854 http://serverfault.com/questions/263223/nginx-serve-htm-if-exists-instead-of-php/263395#263395 –

Répondre

3

Vous pouvez également mettre en cache des images directement sur Nginx à l'aide de MemcachedModule.

3

la méthode recommandée pour nginx utilise the "try_files" directive

quelque chose comme

location /images/show { 
    try_files $document_root/cache$uri; 
} 
+1

'try_files' est une bonne approche (mieux que si instructions.) Mais je pense que cette directive devrait être 'try_files $ racine_de_document/cache $ uri $ uri;' donc cela revient à l'uir demandé si les images mises en cache ne sont pas trouvées. – myanimal

Questions connexes