【问题标题】:Graceful shutdown of VarnishVarnish 的优雅关闭
【发布时间】:2014-02-05 14:47:56
【问题描述】:

用 Varnish 3 玩了好几个小时 - 这很有趣。我正在尝试找出一种“优雅地停止” Varnish 的方法——这意味着如果我曾经点击sudo service varnish stop 我希望 Apache 能够立即恢复。当然这个想法是当废话击中风扇时停止 Varnish,然后恢复平静。

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

<VirtualHost *:80 127.0.0.1:8080>

有没有聪明的方法来实现这一点?或者是一个命令行脚本要走的路?把 TTL 设为 0 怎么样?

【问题讨论】:

  • 使用 nginx 或 haproxy 代理到两个后端(如果 varnish 连接超时,请将 apache 设置为备份后端)。
  • @Santa 最好不要使用任何其他产品。不过感谢您的建议。
  • 考虑到 socket/port-binding 的工作原理,你需要在它们前面一些东西,不过

标签: apache ubuntu varnish


【解决方案1】:

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

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。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2019-09-26
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多