我希望配置Varnish以优化保持活动超时设置以与我的ELB一起使用。 ELB使用Varnish作为后端(为Tomcat提供缓存)。
保持活动超时值已在Tomcat中设置为120秒。测试它通过该端口工作正常。
# time telnet XXX.XX.XX.XX 8080
Trying XXX.XX.XX.XX...
Connected to XXX.XX.XX.XX
Escape character is '^]'.
Connection closed by foreign host.
real 2m0.038s
user 0m0.002s
sys 0m0.004s
当我们尝试通过Varnish端口9000建立连接时,这个超时时间在6秒内
[root@dev-server ~]# time telnet XXX.XX.XX.XX 9000
Trying XXX.XX.XX.XX...
Connected to XXX.XX.XX.XX.
Escape character is '^]'.
Connection closed by foreign host.
real 0m6.093s
user 0m0.001s
sys 0m0.005s
已检查过多个Varnish选项,但似乎没有任何效果。
我的后端default.vcl配置如下
backend Example {
.host = "localhost";
.port = "8080";
.connect_timeout = 600s;
.first_byte_timeout = 600s;
.between_bytes_timeout = 600s;
.probe = {
.url = "/service/search/test";
.timeout = 500ms;
.interval = 5s;
.window = 10;
.threshold = 8;
}
}
有几个论坛建议使用idle_timeout或sess_timout,但这些都不是可接受的变量。 我正在运行Varnish 3.0.7并且现在没有升级计划。
根据AWS支持,他们建议ELB空闲超时+保持活动超时1秒,一般请求超时加倍。
例如;
ELB idle timeout = 60 s
Request timeout = 120 s
KeepAlive timeout = 61 s
我们正确设置了ELB超时,但只需要弄清楚我们如何在Varnish中设置它,因为连接在6秒内关闭。 理想情况下,我们希望在120秒内关闭(在Tomcat中设置相同的值)
我们将不胜感激。 感谢
答案 0 :(得分:0)
多个论坛的建议都是正确的,timeout_idle
(之前在Varnish 3中称为sess_timeout
)是您正在寻找的设置:
- 单位:秒
- 默认值:5
持久会话的空闲超时。如果在这么多秒内没有收到HTTP请求,会话就会关闭。
但是,请注意,这是varnishd
参数而不是VCL设置,因此它不会进入您的VCL,而是作为命令行参数传递给varnishd
。
要应用,请将-p sess_timeout=61
添加到传递给varnishd
的命令行参数列表中。 (通常这个参数会添加到您的发行版configuration file that starts varnish,例如旧版Debian / Ubuntu上的/etc/default/varnish
。
您需要记住重新启动varnishd
进程(例如,Debian / Ubuntu上的sudo service varnish restart
)才能使设置生效。