我有一個坐在PHP機器前面的Varnish設置。對於98%的頁面,單個請求超時(VLC中的req.connect_timeout
)有效。然而,我有幾頁,我們預計需要3分鐘纔會超時。有沒有辦法爲varnish中的特定請求設置req.connection_timeout?如果是這樣,請向我展示VCL中的燈光。我想爲所有頁面保留相同的req.connect_timeout
,但爲這幾個特定頁面提高這個數字。有沒有辦法爲varnish中的特定請求設置req.connection_timeout?
1
A
回答
1
我認爲connection_timeout限制了建立連接到後端的時間,first_byte_timeout和between_bytes_timeout限制了處理時間。你有沒有嘗試以編程方式在vcl_recv中設置bereq.first_byte_timeout?例如。喜歡的東西:
backend mybackend {
.host = "127.0.0.1";
.port = "8080";
.connect_timeout = 100ms;
.first_byte_timeout = 5s;
.between_bytes_timeout = 5s;
}
sub vcl_recv {
set req.backend = mybackend;
if (req.url ~ "/slowrequest") {
# set req.connect_timeout = 180s; # old naming convention?
set bereq.connect_timeout = 180s;
}
# .. do default stuff
}
讓我知道,如果它的工作原理...
3
不幸的是,這並不清漆> 3
很心痛工作。似乎沒有辦法真正實現這個目標。
我現在有一個解決方案:
使用vcl_miss!
下面是一個例子:
sub vcl_recv {
set req.backend = director_production;
if (req.request == "POST") {
return(pipe);
}
else {
return(lookup);
}
}
sub vcl_miss {
if (req.url ~ "/longrunning") {
set bereq.first_byte_timeout = 1h; # one hour!
set bereq.between_bytes_timeout = 10m;
} else {
set bereq.first_byte_timeout = 10s;
set bereq.between_bytes_timeout = 1s;
}
}
這對我的作品。 讓我擔心的是varnish的文檔指出,當在緩存中找不到am對象時總是調用vcl_miss。在我的第一個版本中,我忽略了vcl_recv中的if/else。然後,我不得不再次體驗文檔是錯誤的。需要明確說明「返回(查找)」。否則,不會調用vcl_miss。 :(
2
我會通過在varnish中聲明多個後端來解決它,每個後端都有一個不同的超時時間 - 但可能指的是同一個IP和服務器,然後你可以簡單地爲某些URL設置一個新的後端,使用宣稱有超時
if (req.url ~ "[something]") {
set req.backend = backend_with_higher_timeout;
}
1
在VCL 4.0,你可以定義你的後端和清漆提示使用它:
sub vcl_recv {
if (req.method == "POST" && req.url ~ "^/admin") {
set req.backend_hint = backend_admin_slow;
}
}
相關問題
- 1. 有沒有辦法爲一個請求設置一個cookie?
- 2. 有沒有辦法將Keyboard.FocusedElement設置爲特定的元素?
- 3. 有沒有辦法爲excel加載項請求特定的webview版本?
- 4. 有沒有辦法設置遠程特定的.gitignores?
- 5. 有沒有辦法爲RadioGroup設置BackgroundColor?
- 6. 有沒有辦法爲Twilio SMS發送請求設置日期和時間?
- 7. 有沒有辦法爲api.ai中的請求動態生成sessionid
- 8. 有沒有辦法在SFSafariViewController所做的初始請求中設置引用者?
- 9. 有沒有辦法爲YUI DataTable的特定實例設置CSS信息?
- 10. 有沒有辦法將android:theme全局設置爲特定的視圖類型?
- 11. 有沒有辦法查看待處理的請求會影響特定文件?
- 12. 有沒有辦法來設置的LotusScript
- 13. 有沒有辦法在DataSource配置中設置時區爲UTC
- 14. 有沒有辦法在Zend_Form_Element_MultiCheckbox中設置「只讀」的特定選項
- 15. 有沒有辦法提取自定義請求頭與cgicc
- 16. 有沒有辦法在GridBagLayout中設置固定的行和列?
- 17. 有沒有辦法在JQM select中設置選定的值?
- 18. 有沒有辦法檢查推送通知設置是否被請求?
- 19. 使用AngularJS $ http與asp.net webservice,有沒有辦法設置請求標頭?
- 20. 有沒有辦法改變C#(ASP.NET MVC3)中的請求的TimeZone?
- 21. Zend:有沒有辦法爲ajax請求禁用init函數?
- 22. 有沒有辦法與simple_form提交AJAX/JSON請求爲Rails
- 23. 有沒有辦法指定特定的Heroku dyno來處理對特定URL的請求?
- 24. 有沒有辦法只爲特定的包裝器定義CSS?
- 25. 有沒有辦法來設置開發
- 26. 有沒有辦法設置HttpResponse?
- 27. 有沒有辦法恢復VS2010設置?
- 28. 有沒有辦法在Android上的PhoneGap中攔截HTTP請求?
- 29. 有沒有辦法從Jersey中的javax.ws.rs.Client獲取請求信息?
- 30. 有沒有辦法轉發Http處理程序中的請求
會給這個一杆謝謝 – buley 2011-03-05 20:35:22
3不起作用。!。 x,如@der_do所述 – 2013-06-23 13:31:43