我有一个 Nginx 配置,可以正常工作并正确提供静态文件:
location /static/ {
alias /tmp/static/;
expires 30d;
access_log off;
}
但是我现在要做的是,如果静态文件不存在/tmp/static
,Nginx 会在/srv/www/site/static
. 我不知道如何实现这一点,我已经尝试了一些东西try_files
,但我不知道如何正确使用它。
我有一个 Nginx 配置,可以正常工作并正确提供静态文件:
location /static/ {
alias /tmp/static/;
expires 30d;
access_log off;
}
但是我现在要做的是,如果静态文件不存在/tmp/static
,Nginx 会在/srv/www/site/static
. 我不知道如何实现这一点,我已经尝试了一些东西try_files
,但我不知道如何正确使用它。
您可以将根设置为您要使用的两个路径的公共前缀(在本例中为 /),然后只需在 try_files 参数中指定其余路径:
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 之外的文件。
以下应该可以解决问题:
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
您可以使用带有“root”的命名位置来处理一系列后备位置。请注意,您不能在命名位置内使用“别名”。
location / {
root /path/to/primary/html;
try_files $uri $uri/ @fallback;
}
location @fallback {
root /path/to/secondary/html;
try_files $uri $uri/ =404;
}
使用SlowFS Cache Module似乎可以满足您的需求。它将您的静态内容缓存在一个临时目录中,该目录可能存储在更快的磁盘上,并为您管理回退。