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部分。