![NGINX try_files 不工作:500 服务器错误](https://linux22.com/image/695252/NGINX%20try_files%20%E4%B8%8D%E5%B7%A5%E4%BD%9C%EF%BC%9A500%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%94%99%E8%AF%AF.png)
我正在尝试使用try_files让我的服务器恢复到不同的文件位置,但我无法让它工作。相反,我得到了 500 服务器错误。以下是文件结构:
选择 > 网站 > 存档
首先,我要检查网页,如果文件不在网页中,则将其存档。例如:如果我想抓取 test.mp4,首先我要查看 /opt/web/,然后查看 /opt/web/archive
配置如下:
http {
server {
listen 80;
root /opt/web/;
location / {
try_files $uri/ /opt/web/archive/;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
# Custom headers and headers various browsers *should* be OK with but aren't
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
autoindex on;
set $no_cache "";
if ($request_uri ~* \.mp4$) {
set $no_cache "1";
}
proxy_no_cache $no_cache;
proxy_cache_bypass $no_cache;
}
}
}
有想法吗?
try_files $uri/ $uri/archive/;
也不起作用
答案1
当用户请求时http://www.example.com/test.mp4
,$uri
变量将包含/test.mp4
。
现在,当你完成try_files $uri/ /opt/web/archive/;
配置后,nginx 将尝试以下文件:
/opt/web/test.mp4/
/opt/web/archive/
因此,您应该使用:
try_files $uri archive$uri;
在您的配置中。
另一个较小的问题是您使用if
。而不是这样:
set $no_cache "";
if ($request_uri ~* \.mp4$) {
set $no_cache "1";
}
proxy_no_cache $no_cache;
proxy_cache_bypass $no_cache;
我建议你使用这个:
location ~ \.mp4$ {
proxy_no_cache 1;
proxy_cache_bypass 1;
}
答案2
这里存在两个问题,首先,try_files 不正确,导致重定向无限循环直至出错:
*2 重写或内部重定向循环,同时内部重定向到“/06000513//archive//archive//archive//archive//archive//archive//archive//archive//archive//archive//archive/”,客户端:00.000.000.00,服务器:,请求:“GET /06000513/ HTTP/1.1”,主机:“myhost.com”
决议是try_files $uri /archive$uri =404;
使用try_files $uri/ /opt/web/archive/;
第二个问题是缓存,因为我们关闭了缓存,所以在不同位置查找文件时会出现错误。最简单的解决方法就是删除它:
set $no_cache "";
if ($request_uri ~* \.mp4$) {
set $no_cache "1";
}
proxy_no_cache $no_cache;
proxy_cache_bypass $no_cache;
新配置:
http {
server {
listen 80;
root /opt/web/;
location / {
try_files $uri /archive$uri =404;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
# Custom headers and headers various browsers *should* be OK with but aren't
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
autoindex on;
}
}
}