如何告诉 Varnish 显示自定义 html 错误页面而不是默认的“Guru Meditation”消息?
我正在与一个组织合作,该组织已部署 Varnish 作为其所有 Web 流量的缓存反向代理。他们的流量由大量客户生成的动态网站组成,通常收集静态资产。
虽然我试图喜欢 varnish(原则上我认为它有一个非常好的架构),但我在管理它和解决出现的问题时遇到了一些麻烦,所以我想知道它是否真的是正确的选择。之前我用squid做反向代理,但是作用不同,所以没有比较明确的依据。
我的问题针对在生产中部署了 varnish 或针对替代方案认真评估它的人:您是坚持使用 varnish,还是最终使用了另一个反向代理?你坚持或转换的关键点是什么,如果你确实使用了其他东西,你最终使用了什么?
我有一个 django 应用程序,我想在它前面的服务器上设置 Varnish。在另一个 serverfault 线程中,有人建议将 Nginx 放在 Varnish 前面。
我应该将 Nginx 放在缓存服务器上的 Varnish 前面吗?如果是这样,我应该在应用服务器上使用 Nginx 吗?
一个 Wordpress 网站正在使用 Varnish。
我想为单个 URL 而不是整个域清除 Varnish。
使用此命令,我可以为整个域重新启动 Varnish:
varnishadm -T :6082 -S /etc/varnish/secret 'ban req.http.host ~ \"http://www.foo.com\" && req.url ~ \"^/\"'
Run Code Online (Sandbox Code Playgroud)
但是,我只想为单个 url 清除清漆。
前任: www.foo.com/url_to_be_purged
我试过用单个 URL 替换上一个命令:
varnishadm -T :6082 -S /etc/varnish/secret 'ban req.http.host ~ \"http://www.foo.com/url_to_be_purged\" && req.url ~ \"^/\"'
Run Code Online (Sandbox Code Playgroud)
但它没有用,URL 仍然是HITVarnish 中的。
关于如何实现这一目标的任何想法?
更新
根据ghloogh 的建议,我尝试了以下命令:
varnishadm -T :6082 -S /etc/varnish/secret ban "req.http.host == http://www.foo.com && req.url == http://www.foo.com/url_to_be_purged"
Run Code Online (Sandbox Code Playgroud)
我也试过这种变化:
varnishadm -T :6082 -S /etc/varnish/secret ban "req.http.host == http://www.foo.com && req.url == /url_to_be_purged" …Run Code Online (Sandbox Code Playgroud) 我希望使用 Heartbeat/Squid/Varnish/etc 之类的东西来平衡内部 apache 实例之间的传入流量。这必须是软件而不是硬件,因为我所有的东西都在 VPS 上运行。我在这方面没有很多经验,如果我滥用术语并选择了错误的包,那么很抱歉。
我已经草拟了一些东西来说明我所追求的。绿色部分是初始设置的样子,蓝色部分是由于流量增加而添加更多 apache 实例后的样子。这可能不是这些事情的工作方式,但理想情况下,我会将平衡器的 IP 添加到域的 DNS 中。然后平衡器将查看每个 apache 实例上有多少连接(通过一些内部 IP 或永久 IP 的配置列表)并平均分配连接。蓝色部分有第二个平衡器,因为我确信在某些时候平衡器也需要帮助。
也许我正在解决这个错误,但我正在寻找关于“平衡器/s”应该是什么以及如何设置它们的最佳实践的帮助。
任何帮助都会很棒。

我需要监控在我的网络服务器上运行的几个进程。出于某种原因,清漆目前每天或每两天崩溃一次。我正在使用 monit 据称自动重新启动清漆,但它不起作用。这是我的 Varnish 的 monit.conf 条目。
check process varnish with pidfile /var/run/varnish.pid
start program = "/etc/init.d/varnish start" with timeout 60 seconds
stop program = "/etc/init.d/varnish stop"
if failed host <my server ip> port 80 protocol http
and request "/blank.html" then restart
if 3 restarts within 5 cycles then timeout
group server
Run Code Online (Sandbox Code Playgroud)
日志文件显示,在varnish停止运行后,尝试重新启动之后都失败了。然后最终 monit 停止监视清漆。
有人对我如何解决这个问题有建议吗?或者更好的是,您能否提出其他简单的自动监控和重启崩溃进程的方法?谢谢!
清漆日志:
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1340829925 1.0
12 SessionOpen c 79.124.74.11 3063 :80
12 SessionClose c EOF
12 StatSess c 79.124.74.11 3063 0 1 0 0 0 0 0 0
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1340829928 1.0
0 CLI - Rd ping
0 CLI - Wr 200 19 PONG 1340829931 1.0
12 SessionOpen c 108.62.115.226 46211 :80
12 ReqStart c 108.62.115.226 46211 467185881
12 RxRequest …Run Code Online (Sandbox Code Playgroud) 我想为 Varnish Cache 安装一个额外的模块,即Shield 模块。
我怎样才能做到这一点?我从 Ubuntu 存储库安装了 Varnish 3.0。
如何获取模块需要编译的 Varnish 源代码?我是否还需要从源代码编译 Varnish?这是否会禁用通过存储库更新 Varnish?
有人可以给出分步说明吗?
我正在尝试在 ubuntu 16.04 上安装清漆,
我读了几篇文章都没有工作。从我读到的内容来看,从 ubuntu 15.04 开始,配置 varnish 的方式发生了变化(因为 systemd)。
现在我有一个真正的烂摊子,不起作用:
/etc/default/varnish :
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"
Run Code Online (Sandbox Code Playgroud)
/etc/varnish/default.vcl(通常它指向一个指向 127.0.0 和端口 8080 的主机,但出于调试目的,我将其修改为外部域) vcl 4.0;
# Default backend definition. Set this to point to your content server.
backend default {
.host = "www.varnish-cache.org";
.port = "80";
}
Run Code Online (Sandbox Code Playgroud)
/etc/apache2/ports.conf
Listen 8080
Run Code Online (Sandbox Code Playgroud)
grep -R 'ExecStart=/usr/sbin/varnishd' /etc/
/etc/systemd/system/varnish.service:ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
/etc/systemd/system/varnish.service.d/customexec.conf:ExecStart=/usr/sbin/varnishd -a …Run Code Online (Sandbox Code Playgroud) varnish ×10
linux ×2
nginx ×2
squid ×2
ubuntu ×2
apache-2.2 ×1
cache ×1
django ×1
heartbeat ×1
monit ×1
monitoring ×1
service ×1
systemd ×1
ubuntu-16.04 ×1
web-server ×1