油漆的优雅关闭

时间:2014-01-16 15:36:24

标签: apache ubuntu varnish

在Varnish 3上玩了好几个小时 - 这很有趣。我想找到一种'优雅地停止'Varnish的方法 - 这意味着如果我曾经打过sudo service varnish stop我希望Apache能够立刻回来。当然,这个想法就是当垃圾撞到风扇然后恢复和平时停止清漆。

问题是Apache现在监听8080,所以我一直在努力让Apache同时监听端口80和8080 - 它似乎不是正确的方式,因为它不起作用!

<VirtualHost *:80 127.0.0.1:8080>

有没有一种聪明的方法来实现这一目标?或者是一个命令行脚本的方式去?把TTL设置为0怎么样?

1 个答案:

答案 0 :(得分:3)

这可以很容易地完成,但它涉及某种反向代理。

Stack Exchange使用的是haproxy,但nginx也可以,其他负载均衡器和反向代理也是如此。

haproxy config:

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秒返回一次清漆。

nginx config:

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处理,而不必关心清漆。

由于端口绑定的工作方式,除非您有一个使用apache和varnish的外部软件,否则如果没有响应,则无法让它们切换端口。