Squid retry_on_error:状态码与备用线路
在文档说明的状态与备用目标范围内使用 Squid retry_on_error,而不要把它当作所有请求重发的通用设置。
Squid 中有一个名为 retry_on_error 的选项,但这个名字比它的有用含义更宽。它并不意味着每个失败的请求都会无限重试,直到页面恢复正常。
在支持该指令的版本中,它默认关闭。有文档记录的重试列表是 403、500、501、502、503 和 504,并且会通过另一个可用的目标重试请求。这在具有备用转发路径的层级结构中尤其相关。它并不只是对同一套接字向同一服务器的定时重试。
先给故障命名
连接代理时的拒绝、代理认证失败、来自源站的 HTTP 错误,以及开始传输后中断的响应,并不提供相同的重试机会。不要指望一个设置能用同样的方式处理这四种情况。
对于私有出口,还要决定备用路径是否可以接受。另一个父级可能有不同的公网源地址、认证策略或网络位置。通过该备选路径成功,可能会违背当初选择第一个父级的原因。
应用操作带来另一个问题:重复请求可能重复其效果。客户端和服务器需要合适的重试语义,尤其是对创建或更改数据的操作。代理设置不能替代应用层对不确定结果的处理。
请阅读适用于你确切版本的指令;参考文档会列出可用性和默认行为。还要留意请求期限和用户可见的总等待时间。额外的一次转发尝试可能耗尽剩余时间,却不会带来更好的结果。
调查间歇性故障时,记录状态、所选父级或目标,以及尝试顺序。否则,重试可能让反复出现的路由问题看起来像整体缓慢的网站,同时掩盖真正失败的路径。