我让 Nginx 作为 SSL 终结器侦听端口 443,并将未加密的流量代理到同一台服务器上的 Varnish。Varnish 3 正在处理此流量,并且流量直接通过端口 80 进入。所有流量都未加密地传递到集群中其他服务器上的 Apache 实例。Apache 实例使用 mod_rpaf 将记录的客户端 IP 替换为 X-Forwarded-For 标头的内容。
我的问题是,如果流量来自 Nginx,而“正确的”客户端 IP 被记录在 VarnishNCSA 日志中,看起来 Varnish 正在(可以理解地)用 127.0.0.1 下游替换 Nginx 的 X-Forwarded-For 标头,这是用 Apache 记录的。如果 X-Forwarded-For 已经填充,是否有一种很好的简单方法来阻止 Varnish 重写 X-Forwarded-For?
绝对地; 的 Varnish 处理
X-Forwarded-For
实际上只是在默认vcl_recv
函数中定义。函数的默认定义始终附加到您在活动 VCL 文件中定义的函数,但如果您定义的函数始终处理请求,则默认逻辑将永远不会执行。
vcl_recv
沿着这些线设置一个:编辑:
由于 Varnish 也直接处理某些连接,因此更好的方法可能是让它有选择地设置标头。您仍然需要包含完整的
vcl_recv
内容,以便默认不应用自己的标题,但将其包含在顶部: