用 Varnish 3 玩了几个小时 - 这很有趣。我正在尝试找出一种“优雅地停止” Varnish 的方法——这意味着如果我曾经点击 sudo service varnish stop
我希望 Apache 马上回来。当然,这个想法是当废话击中风扇时停止 Varnish,然后恢复平静。
问题是 Apache 现在监听 8080,所以我一直在尝试让 Apache 同时监听端口 80 和 8080 - 这似乎不是正确的方法,因为它不起作用!<VirtualHost *:80 127.0.0.1:8080>
有没有聪明的方法来实现这一目标?或者是一个命令行脚本要走的路?将 TTL 设置为 0 怎么样?
最佳答案
这可以很容易地完成,但它涉及某种反向代理。
Stack Exchange 使用的是 haproxy , 但是 nginx也可以工作,就像一堆其他负载均衡器和反向代理一样。
haproxy 配置:
global
maxconn 4096
user haproxy
group haproxy
daemon
log 127.0.0.1 local0 debug
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option forwardfor
maxconn 2000
timeout connect 3s
frontend public
bind *:80
default_backend servers
backend servers
balance roundrobin
server varnish 127.0.0.1:5000 check inter 15s
server apache 127.0.0.1:8080 backup
如果 varnish 没有响应,这将自动路由到 apache,并每 15 秒检查一次 varnish 返回。nginx配置:
upstream backend {
server 127.0.0.1:5000 fail_timeout=3s; # varnish
server 127.0.0.1:8080 backup; # apache
}
server {
location / {
proxy_pass http://backend;
}
}
这几乎是同样的事情。此外,您可以在这些前端进行 SSL 处理,而不必关心 Varnish 。由于端口绑定(bind)的工作方式,除非您有一个与 apache 和 varnish 一起使用的外部软件,否则如果没有响应,您将无法让它们切换端口。
关于apache - Varnish 的优雅关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21166131/