我一直在 Apache 前面运行 varnish (3.0.1),两天前流量激增时,所有访问该网站的访问者都开始收到 403 错误。通过谷歌搜索,我发现一个线程说这是由于 Varnish 的 IP 被传递给 Apache,而不是发出请求的用户的 IP。(见https://www.varnish-cache.org/lists/pipermail/varnish-misc/2011-March/005730.html)
建议是“您可以尝试将 IP 传递为 x-forwarded-for”...我不确定所引用的 IP 是什么(客户端的?)或者实际上我该如何去做。有人见过这种情况或知道如何实现所建议的吗?
答案1
您的后端可能只返回一次 403,但 Varnish 会将其缓存以供将来的请求使用。是的,如果您没有将 VCL 配置为其他方式,Varnish 甚至会缓存您不希望它缓存的内容(例如错误页面)。
我实际上无法评论你的后端是否有速率限制,但在你开始摆弄 Varnish 标头以提供你尚未解决的问题的解决方案之前,你应该先尝试弄清楚这一点。
但是,要回答您的问题,您可以像这样在 Varnish 中设置 x-forwarded-for 标头:
在 vlc_recv 中
req.http.x-forwarded-for = client.ip