为什么 try_files 将每个路径附加在一起?

为什么 try_files 将每个路径附加在一起?

我在用着try_files像这样:

http {
  服务器 {
    错误日志/var/log/nginx 调试;
    听 127.0.0.1:8080;
    地点 / {
      索引关闭
      默认类型应用程序/八位字节流;
      尝试文件/文件1$uri/文件2/$uri/文件3$uri;
    }
  }
}

在错误日志中,显示以下内容:

*[错误] 15077#0:45399 重写或内部重定向循环,同时内部重定向到“/files1/files2/files3/path/to/my/image.png”,客户端:127.0.0.1,服务器:,请求:“GET /path/to/my/image.png HTTP/1.1”,主机:“mydomain.com”,引用:“http://mydomain.com/folder

谁能告诉我为什么 nginx 正在寻找/files1/files2/files3/path/to/my/image.png而不是/files1/path/to/my/image.png,/files2/path/to/my/image.png/files3/path/to/my/image.png

谢谢

答案1

http://nginx.org/r/try_files

syntax:     try_files file ... uri;
            try_files file ... =code;

最后一个参数指定内部重定向的返回代码或 URI。在您的例子中,它是/files3$uri

也许你确实想要这个: try_files /files1$uri /files2$uri /files3$uri =404;

答案2

我怀疑 nginx 本质上是递归的,因为 中指定的路径try_files与块匹配location /,从而再次应用该try_files指令。尝试添加这些位置块以捕获正在搜索的路径。

location /files1 {}
location /files2 {}
location /files3 {}

答案3

通过在位置块外添加根指令解决了该问题:

http {
  根 /;
  地点 / {
    try_files 文件1$uri 文件2$uri 文件3$uri =404;
  }
}

相关内容