在我的测试场景中,如果正在创建一个文件并且有人请求该文件,则将返回 404。我想为该文件实现一次重试。当前配置
location /file/ {
root /var/www/html/;
try_files $uri $uri/ @retry;
}
location @retry {
proxy_pass http://127.0.0.1;
}
这对于实时文件创建和访问来说很有效(如果文件返回 404,它会重试)。但如果文件不存在,它会创建嵌套请求(我猜),最终将返回 503 网关超时。1
)有没有更好的实现?
2)当第一个请求超时时,嵌套请求也会终止吗?
答案1
只需复制您的位置块,而不是代理到本地主机。
location /file/ {
root /var/www/html/;
try_files $uri $uri/ @retry;
}
location @retry {
root /var/www/html/;
try_files $uri $uri/ =404;
}
但考虑到 nginx 处理请求的速度,对静态文件进行重试似乎有点真的奇怪的想法。你应该在工作流程中修复你的想法。