让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_文件的方法,但我不知道如何正确使用它。似乎可以通过使用。它将静态内容缓存在一个临时目录中

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

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路径,它由内部重定向更改。我猜你在某种程度上进行内部重定向,这导致了你的问题。