Proxy
通過 Varnish 提供應用程序 HTTP/5xx 錯誤頁面
我正在通過 Varnish 執行一些 Rails 應用程序,以提供更好的記憶體支持,希望它比 Rails 中的內置頁面記憶體選項更靈活。
我偶然發現的一個問題是,當從應用程序伺服器返回 HTTP/50x 錯誤時,varnish 不會提供自定義錯誤頁面(例如,當 rails 應用程序引發異常時,我們會呈現自定義錯誤 HTML 模板) - 而不是看到“nice”使用者友好的錯誤頁面我們看到以下文本:
Error 503 Service Unavailable Service Unavailable Guru Meditation: XID: 828451354 Varnish cache server
有沒有辦法將獲取的 HTML 從後端伺服器傳遞給客戶端?是否像實現 sub_error VCL 方法並使用 fetch 或 pass 指令一樣簡單?
謝謝。
好吧,我有一個答案——令人驚訝的是,問題甚至不在於清漆沒有傳遞 HTTP/500 響應內容。
當 Varnish 在連接到後端伺服器時超時或等待發送字節時,實際上引發了 HTTP/503 錯誤。
基本上,如果與後端的連接成功,但沒有一定的超時時間,後端沒有發送第一個字節,或者發送字節之間存在延遲,Varnish 將超時並返回 HTTP/503 錯誤。
解決方案是更新超時值(當然,修復慢速後端伺服器),如下所示(詳見:http: //varnish-cache.org/wiki/VCL):
backend www { .host = "www.example.com"; .port = "http"; .connect_timeout = 1s; .first_byte_timeout = 5s; .between_bytes_timeout = 2s; }