我有一个以 varnish+nginx 为前端的 Ruby on Rails 应用程序。由于除非您是登录用户,否则大多数站点内容都是静态的,因此我想在用户注销时使用清漆大量缓存站点,但仅在用户登录时缓存静态资产。
当用户登录时,他们的 Cookie: 标头中会出现 cookie 'user_credentials',此外我需要跳过缓存 /login 和 /sessions 以便用户可以首先获得他们的 'user_credentials' cookie .
默认情况下,Rails 不会设置缓存友好的 Cache-control 标头,但是当用户未登录时,我的应用程序会设置一个“public,s-max-age=60”标头。Nginx 设置为返回“远未来”过期标头对于所有静态资产。
我目前的配置在登录时完全绕过缓存,包括静态资产 - 并在注销时为所有内容返回缓存 MISS。我花了几个小时绕圈子,这是我目前的 default.vcl
director rails_director round-robin {
{
.backend = {
.host = "xxx.xxx.xxx.xxx";
.port = "http";
.probe = {
.url = "/lbcheck/lbuptest";
.timeout = 0.3 s;
.window = 8;
.threshold = 3;
}
}
}
}
sub vcl_recv {
if (req.url ~ "^/login") {
pipe;
}
if (req.url ~ "^/sessions") {
pipe;
} …
Run Code Online (Sandbox Code Playgroud) 出于某种原因,当使用 wlc 或 lc 调度程序时,ipvsadm 似乎并没有平等地平衡我的真实服务器之间的连接。一台真正的服务器会收到大量请求,而其他服务器收到的连接相对较少。
我的 ldirectord.cf 文件如下所示:
quiescent = yes
autoreload = yes
checktimeout = 10
checkinterval = 10
# *.example.com http
virtual = 192.0.2.111:http
real = 10.10.10.1:http ipip 10
real = 10.10.10.2:http ipip 10
real = 10.10.10.3:http ipip 10
real = 10.10.10.4:http ipip 10
real = 10.10.10.5:http ipip 10
scheduler = lc
protocol = tcp
service = http
checktype = negotiate
request = "/lb"
receive = "Up and running"
virtualhost = "site.com"
fallback = 127.0.0.1:http
Run Code Online (Sandbox Code Playgroud)
我认为可能导致问题的奇怪事情(但我真的不确定)是 ipvsadm …
我正在尝试连接 stunnel 和 haproxy 以将 https 连接转发到某些后端服务器。
我已经正确设置了 haproxy,而且我似乎正确设置了 stunnel。问题是,当我在一段时间后通过负载测试进行设置时,我开始看到这些日志条目(在开始出现连接被拒绝错误之前,我已经包含了来自正确连接的最后几个条目):
2010.05.05 11:23:29 LOG7[3498:3086792368]: https accepted FD=510 from 10.195.158.225:42722
2010.05.05 11:23:29 LOG7[3498:3035233168]: https started
2010.05.05 11:23:29 LOG7[3498:3035233168]: FD 510 in non-blocking mode
2010.05.05 11:23:29 LOG7[3498:3035233168]: TCP_NODELAY option set on local socket
2010.05.05 11:23:29 LOG7[3498:3035233168]: Waiting for a libwrap process
2010.05.05 11:23:29 LOG7[3498:3086792368]: https accepted FD=511 from 10.195.158.225:42723
2010.05.05 11:23:29 LOG7[3498:3035167632]: https started
2010.05.05 11:23:29 LOG7[3498:3035167632]: FD 511 in non-blocking mode
2010.05.05 11:23:29 LOG7[3498:3035167632]: TCP_NODELAY option set on local socket
2010.05.05 11:23:29 …
Run Code Online (Sandbox Code Playgroud)