为什么try_files将每个path追加在一起?

我正在使用这样的try_files

 http {
  服务器{
     error_log / var / log / nginx debug;
    听127.0.0.1:8080;
    位置 / {
      索引closures
       default_type application / octet-stream;
       try_files / files1 $ uri / files2 / $ uri / files3 $ uri;
     }
   }
 }

在错误日志中,它显示了这一点:

* [错误] 15077#0: 45399在内部redirect到“/files1/files2/files3/path/to/my/image.png”,client:127.0.0.1,server:,request:“GET /path/to/my/image.png HTTP / 1.1“,主机:”mydomain.com“,引荐来源:” http://mydomain.com/folder “

谁能告诉我为什么/files1/files2/files3/path/to/my/image.png正在寻找/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

谢谢

http://nginx.org/r/try_files

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

最后一个参数指定内部redirect的返回码或URI。 你的情况是/files3$uri

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

我怀疑nginx本质上是recursion的,因为在try_files中指定的path是由location /块匹配的,它再次应用try_files指令。 尝试添加这些位置块来捕获正在search的path。

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

该问题已通过在位置块外添加root指令来解决:

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