我在用着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
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; } }