2014-04-04 91 views
1

問題
我有一個在DMZ設置中的apache服務器作爲我們的現場機器的反向代理。大多數情況下,這是一種魅力。問題在於用戶說偶爾他們會「暫停」。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

我們發現超時的來源。第三方API中有記錄鎖,導致一些請求掛起。一旦這個問題得到解決,我們就停止在代理上獲取超時。

令我困惑的是我們在代理服務器上發生了超時錯誤,而在主現場機器(代理目標)上沒有發生超時錯誤。這讓我覺得這個請求不能在實時生效,但只能在代理上進行。顯然這是錯誤的,因爲超時的來源是在現場機器上,我們只是沒有看到那裏的apache錯誤。

我仍然不知道爲什麼我們只能看到代理日誌中的超時錯誤,所以如果有人有解釋我會接受這個答案。