如何为每个请求而不是全局配置 Squid 连接|读|写超时
How to configure Squid connection|read|write timeout per Request instead of Globally
设置
假设我有两个不同的 HTTP 客户端使用同一个 Squid 实例。
第一个客户端,名为 ClientA,具有激进的 Http read/write 和 5 秒的连接超时。另一个名为 ClientB 的客户端有一个非常放松的 120 秒超时。
我的 Squid 服务器配置如下所示:
connect_timeout 1 minute
read_timeout 1 minute
write_timeout 1 minute
场景一
ClientA 向 ServerX 发送请求(通过 Squid),该请求将在接受连接之前等待 45 秒,然后立即回复。
问题一
ClientA 将在 5 秒后超时,但 Squid 会注意到并关闭出站连接或等待 ServerX 响应(在 40~ 秒内)并且无法将结果写回不再监听的 ClientA ?
场景二
ClientB 向 ServerY 发送请求(通过 Squid),该请求将在接受连接之前等待 61 秒,然后立即回复。
问题二
ClientB 不会超时,但是 Squid 应该在 60 秒后超时并向 ClientB 发送一个 Http Timeout 408,对吗?
全局问题
有什么方法可以设置 Squid 以便我们可以通过请求而不是在服务级别全局设置超时?
重要说明:squid 关于超时的行为会根据所使用的协议而改变。在 HTTPS 的情况下,它无法检查隧道连接的 HTTP headers,因此它无法接受任何 Connection
、Proxy-Connection
或 Keep-Alive: timeout=xx
值。
场景一
Squid 会在发现客户端离开后立即关闭出站连接。
场景二
squid 确实会超时,但结果将取决于所使用的协议。在 HTTP 的情况下,它将 return “504 Gateway Time-out
” 并添加一个额外的 header “X-Squid-Error: ERR_READ_TIMEOUT 0
”。
对于 HTTPS,它只会关闭连接,因为它无法读取或注入对客户端有意义的 headers。
全局问题
不在 squid 配置本身中。如果你想 fine-grained 控制持久连接的超时,你应该在你的客户端中这样做。
作为记录,这里是 time-out 设置 squid 将尝试遵守持久连接:
客户端 <-> 鱿鱼:
client_persistent_connections, persistent_request_timeout
鱿鱼<->服务器:
server_persistent_connections、pconn_timeout、read_timeout(对于 HTTPS)
设置
假设我有两个不同的 HTTP 客户端使用同一个 Squid 实例。
第一个客户端,名为 ClientA,具有激进的 Http read/write 和 5 秒的连接超时。另一个名为 ClientB 的客户端有一个非常放松的 120 秒超时。
我的 Squid 服务器配置如下所示:
connect_timeout 1 minute
read_timeout 1 minute
write_timeout 1 minute
场景一
ClientA 向 ServerX 发送请求(通过 Squid),该请求将在接受连接之前等待 45 秒,然后立即回复。
问题一
ClientA 将在 5 秒后超时,但 Squid 会注意到并关闭出站连接或等待 ServerX 响应(在 40~ 秒内)并且无法将结果写回不再监听的 ClientA ?
场景二
ClientB 向 ServerY 发送请求(通过 Squid),该请求将在接受连接之前等待 61 秒,然后立即回复。
问题二
ClientB 不会超时,但是 Squid 应该在 60 秒后超时并向 ClientB 发送一个 Http Timeout 408,对吗?
全局问题
有什么方法可以设置 Squid 以便我们可以通过请求而不是在服务级别全局设置超时?
重要说明:squid 关于超时的行为会根据所使用的协议而改变。在 HTTPS 的情况下,它无法检查隧道连接的 HTTP headers,因此它无法接受任何 Connection
、Proxy-Connection
或 Keep-Alive: timeout=xx
值。
场景一
Squid 会在发现客户端离开后立即关闭出站连接。
场景二
squid 确实会超时,但结果将取决于所使用的协议。在 HTTP 的情况下,它将 return “504 Gateway Time-out
” 并添加一个额外的 header “X-Squid-Error: ERR_READ_TIMEOUT 0
”。
对于 HTTPS,它只会关闭连接,因为它无法读取或注入对客户端有意义的 headers。
全局问题
不在 squid 配置本身中。如果你想 fine-grained 控制持久连接的超时,你应该在你的客户端中这样做。
作为记录,这里是 time-out 设置 squid 将尝试遵守持久连接:
客户端 <-> 鱿鱼: client_persistent_connections, persistent_request_timeout
鱿鱼<->服务器: server_persistent_connections、pconn_timeout、read_timeout(对于 HTTPS)