设置
假设我有两个不同的HTTP客户端使用相同的Squid实例。
第一个名为ClientA的客户端具有激进的Http读/写和连接超时5秒。另一个名为ClientB的客户端具有120秒的非常放松超时。
我的Squid服务器配置如下:
connect_timeout 1 minute
read_timeout 1 minute
write_timeout 1 minute
情景1
ClientA向ServerX(通过Squid)发送请求,该请求将在接受连接之前等待45秒,然后立即回复。
问题1
ClientA将在5秒后超时,但是Squid会注意到并关闭出站连接或等待ServerX响应(在40秒内)并且无法将结果写回不再侦听的ClientA吗? / p>
场景2
ClientB向ServerY(通过Squid)发送请求,该请求将在接受连接之前等待61秒,然后立即回复。
问题2
ClientB不会超时,但是Squid应该在60秒后超时并向客户端B发送一个Http Timeout 408,对吗?
全球问题
有没有办法设置Squid所以我们可以通过Request设置超时而不是全局的服务级别?
答案 0 :(得分:2)
重要提示:squid关于超时的行为可能会根据使用的协议而改变。对于HTTPS,它无法检查隧道连接的HTTP标头,因此无法遵守任何Connection
,Proxy-Connection
或Keep-Alive: timeout=xx
值。
情景1
Squid会在注意到客户端离开时立即关闭出站连接。
场景2
鱿鱼确实会超时,但结果将取决于所使用的协议。对于HTTP,它将返回“504 Gateway Time-out
”并添加其他标题“X-Squid-Error: ERR_READ_TIMEOUT 0
”。
对于HTTPS,它只会关闭连接,因为它无法读取或注入对客户端有意义的标题。
全球问题
不在squid配置本身。如果您希望对持久连接的超时进行细粒度控制,则应在客户端执行此操作。
对于记录,以下是squid将尝试遵循持久连接的超时设置:
客户< - >乌贼: client_persistent_connections,persistent_request_timeout
鱿鱼< - >服务器: server_persistent_connections,pconn_timeout,read_timeout(对于HTTPS)