作者:最低调的鹌鹑 | 来源:互联网 | 2014-05-28 12:03
假设apache为后端服务器:1、修改log记录模块假设原来:LogFormat%h%l%u%t\%r\%s%b%Tcommon增加X-Forwarded-For部分,修改后为LogFormat%h%{X-Forwarded-For}i%l%u%t\%r\%s%b%Tcommon2、X-Forwarded-For部分可
假设apache为后端服务器:
1、修改log记录模块
假设原来:
LogFormat "%h %l %u %t \"%r\" %>s %b %T" common
增加X-Forwarded-For部分,修改后为
LogFormat "%h %{X-Forwarded-For}i %l %u %t \"%r\" %>s
%b %T" common
2、X-Forwarded-For部分可以在varnish的vcl_recv()函数内进行修改
默认的varnish配置中default.vcl
sub vcl_recv {
if (req.restarts == 0) {
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For =
req.http.X-Forwarded-For ", " client.ip;
} else {
set req.http.X-Forwarded-For = client.ip;
}
}
可以看到默认配置中已经将X-Forwarded-For指向了用户的IP,于是在LogFormat增加%{X-Forwarded-For}i后即可在日志文件中出现真实的用户IP。
3、那么如何让后端服务器知道用户实际发出HTTP请求时的host呢?
我对default.vcl作了如下修改:
else部分:
set
req.http.X-Forwarded-For = req.http.host;
由于if部分是在req.http.X-Forwarded-For为空时添加的,我不太清楚什么时候req.http.X-Forwarded-For为空,所以只修改了else部分。