nginx 在 404 时重试一次静态文件

nginx 在 404 时重试一次静态文件

在我的测试场景中,如果正在创建一个文件并且有人请求该文件,则将返回 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 处理请求的速度,对静态文件进行重试似乎有点真的奇怪的想法。你应该在工作流程中修复你的想法。

相关内容