热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

设置Varnish后端服务器显示用户真实的IP的方法

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


推荐阅读
author-avatar
最低调的鹌鹑
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有