我希望配置Varnish以优化keep-alive超时设置以与我的ELB一起工作。ELB使用Varnish作为后端(为Tomcat提供缓存)。
在Tomcat中设置了120秒的keep-alive超时值。通过该端口测试,它可以正常工作。
# 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
检查了清漆的几个选项,但似乎都不起作用。
我违约。后端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_timeout,但这些都不是可接受的变量。我正在运行Varnish 3.0.7,现在没有升级计划。
根据AWS的支持,他们建议ELB空闲超时+ 1秒的keepalive超时和双倍的请求超时。
例如,
ELB idle timeout = 60 s
Request timeout = 120 s
KeepAlive timeout = 61 s
我们已经正确设置了ELB超时,但只需要弄清楚如何在Varnish中设置它,因为连接在6秒内关闭。理想情况下,我们希望它在120秒内关闭(与Tomcat中设置的值相同)
感谢你的帮助。由于
来自几个论坛的建议是正确的,timeout_idle
(以前称为Varnish 3中的sess_timeout
)是您正在寻找的设置:
单位:秒
- 默认值:5
持久会话的空闲超时时间。如果在此秒内未收到HTTP请求,则会话关闭。
但是,请注意,这是一个varnishd
参数,而不是一个VCL设置,所以它不会出现在VCL中,而是作为命令行参数传递给varnishd
。
要应用,将-p sess_timeout=61
添加到传递给varnishd
的命令行参数列表中。(通常这个参数会被添加到你的发行版的配置文件中,开始varnish,例如,旧的Debian/Ubuntu上的/etc/default/varnish
)。
您需要记住重新启动varnishd
进程(例如,Debian/Ubuntu上的sudo service varnish restart
进程)以使设置生效