如何配置Squid连接|读取|每个请求而不是全局写入超时

时间:2016-09-28 18:49:14

标签: http proxy squid

设置

假设我有两个不同的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设置超时而不是全局的服务级别?

1 个答案:

答案 0 :(得分:2)

重要提示:squid关于超时的行为可能会根据使用的协议而改变。对于HTTPS,它无法检查隧道连接的HTTP标头,因此无法遵守任何ConnectionProxy-ConnectionKeep-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)