问题
我在DMZ设置中有一个apache服务器作为我们的直播机器的反向代理。大多数时候,这就像一个魅力。问题是用户说他们偶尔会“超时”。
如果我检查代理上的错误日志,我可以看到一些错误。
[error] [client x.x.x.x] (70007)The timeout specified has expired: ZSRV_MSG158A: Beim Lesen eines Dokuments auf dem fernen Host x.x.x.x ist ein Fehler aufgetreten.
或者用英文,在远程主机x.x.x.x上阅读文档时发生错误。
现场计算机上的错误日志完全是空的。
我尝试过的事情
我的第一个想法是,可能是现场机器正在返回但是代理超时时间较低,所以也许它已经放弃了等待。我发现实时机器的超时时间为300秒(默认值),所以我尝试将代理超时更改为310秒。
这没有什么不同。这让我相信代理和服务器之间可能存在间歇性的连接问题?就像现场机器永远不会收到请求一样。
我已经在现场机器和代理上关闭了keepalive。我也把它改成使用http 1,因为显然这会带来更少的问题?
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#envsettings
有什么想法吗?
答案 0 :(得分:0)
我们找到了超时的来源。第三方API中存在记录锁定,导致某些请求挂起。一旦修复,我们就停止了对代理的超时。
令我困惑的是我们在代理上有超时错误但在主要直播机器(代理目的地)上没有。这让我觉得请求无法在现场超时但不知何故仅在代理上。显然这是错误的,因为超时的来源是在现场机器上,我们只是没有看到那里的apache错误。
我仍然不知道为什么我们只看到代理日志中的超时错误,所以如果有人有解释,我会接受这个作为答案。