2012-09-05 13 views
7

ich Nginx Konfiguration haben, die gut funktioniert und statische dient Dateien richtig:Nginx statische Dateien von mehreren Quellen dienen Erste

location /static/ { 
    alias /tmp/static/; 
    expires 30d; 
    access_log off; 
} 

Aber was soll ich jetzt tun, dass, wenn die statische Datei existiert nicht In /tmp/static sucht Nginx nach der Datei in /srv/www/site/static. Ich bin mir nicht sicher, wie ich das erreichen soll, ich habe ein paar Dinge mit try_files ausprobiert, aber ich weiß nicht, wie ich es richtig benutzen soll.

Antwort

8

Sie können Ihre Wurzel zu dem gemeinsamen Präfix der beiden Pfade, die Sie verwenden möchten gesetzt (in diesem Fall, es ist /), dann geben Sie einfach den Rest der Pfade in den try_files argumente:

location /static/ { 
    root /; 
    try_files /tmp$uri /srv/www/site$uri =404; 
    expires 30d; 
    access_log off; 
} 

Es mag verwirrend sein, root/an einem Speicherort zu verwenden, aber die try_files stellt sicher, dass keine Dateien außerhalb von/tmp/static oder/srv/www/site/static geliefert werden.

+0

Aus irgendeinem Grund funktioniert es nicht mit $ uri, wenn ich $ request_uri es verwende, irgendeine Idee warum? – Flavien

+0

$ request_uri wird auf den ursprünglichen unverarbeiteten uri-Pfad von der Anforderungszeile erweitert. Es ist von internen Weiterleitungen nicht betroffen. $ uri ist der aktuelle uri-Pfad, der verarbeitet wird, und er wird durch interne Weiterleitungen geändert. Ich nehme an, dass du intern umgeleitet wirst und das dein Problem verursacht. – kolbyjack

-1

Es scheint, dass Ihre Bedürfnisse mit der SlowFS Cache Module bedient werden würden. Es speichert Ihren statischen Inhalt in einem temporären Verzeichnis, das vermutlich auf schnelleren Laufwerken gespeichert ist, und verwaltet den Fallback für Sie.

1

Sie können eine benannte Stelle mit „root“ verwenden, um eine Reihe von Ausweichstellen zu verarbeiten . Beachten Sie, dass Sie "Alias" in einem benannten Speicherort nicht verwenden können.

Verwandte Themen