我目前有一个configuration设置如下:
负载均衡器清除caching(x2服务器)到Web节点(x3服务器)(Apache,PHP)
我现在已经在varnish中设置了req.http.X-Forwarded-For = client.ip
,它应该把IP地址传递给Apache节点。 Apache节点也运行mod_rpaf,这将有助于服务器使用X-Forward-IP而不是VarnishcachingIP。
这部分对我来说很好,但我遇到了另一个问题。 目前,只有负载均衡器正在接收请求,并为页面请求清漆caching。 这意味着Apache只loggingLoad Balancer的IP地址。 但是,负载均衡器也会将请求中的X-Forwarded-For标头发送给Varnish。 我如何将这个头文件传递给Apache服务器?
如果您只是对“真实”的客户端IP感兴趣,那么req.http.X-Forwarded-For = client.ip
设置成完全的清漆。
然后,清漆就不会与标题交互 – 它应该将负载平衡器设置的标题传递给Apache,从而允许Apache查看并logging“真实”的客户端IP。
运行nginx -V
并确保你有--with-http_realip_module
如果是这样,请将以下内容添加到/etc/nginx/nginx.conf
HTTP头部分
set_real_ip_from 127.0.0.1; real_ip_header X-Forwarded-For;
一旦完成service nginx restart
(或者/etc/init.d/nginx restart
)
这是testing清漆3.0.4和100%的工作。
******:varnishd -V varnishd (varnish-3.0.4 revision 9f83e8f)
所选的答案是不完全正确的(至less对于Varnish 3,AWS上的apache,你需要在上面放置清漆设置:
sub vcl_recv { set req.backend = dsbalancer; if (req.restarts == 0) { if (req.http.x-forwarded-for) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For; } else { set req.http.X-Forwarded-For = client.ip; } }
和
然后在你的httpd.conf LogFormat中添加一个指令来logging它。