Proxy

通過 Varnish 提供應用程序 HTTP/5xx 錯誤頁面

  • July 7, 2010

我正在通過 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;
}

引用自:https://serverfault.com/questions/155840