让Nginx从多个来源提供静态文件

时间:2012-09-05 00:23:30

标签: nginx static-files

我有一个Nginx配置工作正常并正确提供静态文件:

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

但我现在要做的是,如果/tmp/static中不存在静态文件,Nginx会在/srv/www/site/static中查找该文件。我不知道如何实现这一点,我已经尝试了try_files的一些内容,但我不知道如何正确使用它。

4 个答案:

答案 0 :(得分:9)

您可以将root设置为要使用的两个路径的公共前缀(在本例中为/),然后只需指定try_files args中的其余路径:

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

在一个位置使用root /可能看起来令人不安,但try_files将确保不会提供/ tmp / static或/ srv / www / site / static之外的文件。

答案 1 :(得分:2)

以下应该可以解决问题:

location /static/ {
  expires 30d;
  access_log off;
  try_files tmp/static/$uri tmp/static/$uri/ tmp/static2/$uri tmp/static2/$uri/;
}

有关try_files的文档和示例,请参阅http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

答案 2 :(得分:1)

您可以使用带有“root”的命名位置来处理一系列后备位置。请注意,您不能在命名位置使用“别名”。

location / {
    root /path/to/primary/html;
    try_files $uri $uri/ @fallback;
}
location @fallback {
    root /path/to/secondary/html;
    try_files $uri $uri/ =404;
}

答案 3 :(得分:-1)

使用SlowFS Cache Module似乎可以满足您的需求。它将您的静态内容缓存在一个临时目录中,该目录可能存储在更快的磁盘上,并为您管理后备。