假設(shè)apache為后端
服務(wù)器:
1、修改log記錄模塊
假設(shè)原來(lái):
LogFormat "%h %l %u %t "%r" %>s %b %T" common
增加X(jué)-Forwarded-For部分,修改后為
LogFormat "%h %{X-Forwarded-For}i %l %u %t "%r" %>s
%b %T" common
2、X-Forwarded-For部分可以在varnish的vcl_recv()函數(shù)內(nèi)進(jìn)行修改
默認(rèn)的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;
}
}
可以看到默認(rèn)配置中已經(jīng)將X-Forwarded-For指向了用戶(hù)的IP,于是在LogFormat增加%{X-Forwarded-For}i后即可在日志文件中出現(xiàn)真實(shí)的用戶(hù)IP。
3、那么如何讓后端服務(wù)器知道用戶(hù)實(shí)際發(fā)出HTTP請(qǐng)求時(shí)的host呢?
我對(duì)default.vcl作了如下修改:
else部分:
set
req.http.X-Forwarded-For = req.http.host;
由于if部分是在req.http.X-Forwarded-For為空時(shí)添加的,我不太清楚什么時(shí)候req.http.X-Forwarded-For為空,所以只修改了else部分。