让Nginx为来自多个源的静态文件提供服务
我有一个Nginx配置,可以正常工作并正确地提供静态文件:让Nginx为来自多个源的静态文件提供服务,nginx,static-files,Nginx,Static Files,我有一个Nginx配置,可以正常工作并正确地提供静态文件: location /static/ { alias /tmp/static/; expires 30d; access_log off; } 但我现在想做的是,如果静态文件在/tmp/static中不存在,Nginx将在/srv/www/site/static中查找该文件。我不知道如何实现这一点,我已经尝试了一些使用try_文件的方法,但我不知道如何正确使用它。似乎可以通过使用。它将静态内容缓存在一个临时目录中
location /static/ {
alias /tmp/static/;
expires 30d;
access_log off;
}
但我现在想做的是,如果静态文件在
/tmp/static
中不存在,Nginx将在/srv/www/site/static
中查找该文件。我不知道如何实现这一点,我已经尝试了一些使用try_文件的方法,但我不知道如何正确使用它。似乎可以通过使用。它将静态内容缓存在一个临时目录中,该目录可能存储在更快的磁盘上,并为您管理回退。您可以将根目录设置为要使用的两个路径的公共前缀(在本例中为/),然后只需在try_files参数中指定其余路径:
location /static/ {
root /;
try_files /tmp$uri /srv/www/site$uri =404;
expires 30d;
access_log off;
}
在某个位置使用root/可能会让人感到不安,但try_文件将确保不会提供/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_文件使用的文档和示例,请参阅。您可以使用带有“root”的命名位置来处理一系列备用位置。请注意,不能在命名位置内使用“别名”
location / {
root /path/to/primary/html;
try_files $uri $uri/ @fallback;
}
location @fallback {
root /path/to/secondary/html;
try_files $uri $uri/ =404;
}
出于某种原因,$uri不起作用,当我使用$request\u uri时,它起作用,你知道为什么吗?$request\u uri会从请求行扩展到原始的、未处理的uri路径。它不受任何内部重定向的影响$uri是正在处理的当前uri路径,它由内部重定向更改。我猜你在某种程度上进行内部重定向,这导致了你的问题。