更新时间:2023-04-27 gmt 08:00

获取客户端真实ip-凯发k8国际娱乐官网入口

本章节介绍了不同类型的web应用服务器(包括tomcat、apache、nginx、iis 6和iis 7)如何获取客户端的真实ip,如果有此方面需求,可以参考本文进行配置。

背景信息

网站接入cdn加速后,源站服务器端从ip头部获取的用户访问ip不是客户端的真实ip。当您因为业务需要获取客户端真实ip时,可以通过配置网站服务器获取客户端的真实ip。

代理服务器(cdn、waf等)在把用户的http、websocket、wss请求转到下一环节的服务器时,会在头部中加入一条“x-forwarded-for”记录,用来记录用户的真实ip,其形式为“x-forwarded-for:客户端的真实ip,代理服务器1-ip, 代理服务器2-ip,代理服务器3-ip,……”。

因此,您可以通过获取“x-forwarded-for”对应的第一个ip来得到客户端的真实ip。

nginx如何在访问日志中获取客户端真实ip

如果您的源站部署了nginx反向代理,可通过在nginx反向代理配置location信息,后端web服务器即可通过类似函数获取客户的真实ip地址。

  1. 根据源站nginx反向代理的配置,在nginx反向代理的相应location位置配置如下内容,获取客户ip的信息。
    location ^ / {
        proxy_pass  ....;
        proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
    }
  2. 后端web服务器通过类似函数获取客户的真实ip。
    request.getattribute("x-forwarded-for")

tomcat如何在访问日志中获取客户端真实ip

如果您的源站部署了tomcat服务器,可通过启用tomcat的x-forwarded-for功能,获取客户端的真实ip地址。

  1. 打开“server.xml”文件(“tomcat/conf/server.xml”),accesslogvalve日志记录功能部分内容如下:
    
            
  2. 在pattern中增加“%{x-forwarded-for}i”,修改后的server.xml为:
    
            {x-forwarded-for}i %h %l %u %t "%r" %s %b" />
    
  3. 查看“localhost_access_log”日志文件,可获取x-forwarded-for对应的访问者真实ip。

apache如何在访问日志中获取客户端真实ip

如果您的源站部署了apache服务器,可通过运行命令安装apache的第三方模块mod_rpaf,并修改“http.conf”文件获取客户ip地址。

  1. 执行以下命令安装apache的一个第三方模块mod_rpaf。
    wget https://github.com/gnif/mod_rpaf/archive/v0.6.0.tar.gz
    tar xvfz mod_rpaf-0.6.tar.gz
    cd mod_rpaf-0.6
    /usr/local/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
  2. 打开“httpd.conf”配置文件,并将文件内容修改为如下内容:
    loadmodule rpaf_module   modules/mod_rpaf-2.0.so ##加载mod_rpaf模块
    
    rpafenable on
    rpafsethostname on
    rpafproxy_ips 127.0.0.1 <反向代理ips>
    rpafheader x-forwarded-for 
    
  3. 定义日志格式。
    logformat "%{x-forwarded-for}i %l %u %t \"%r\" %>s %b \"%{referer}i\" \"%{user-agent}i\"" common
  4. 启用自定义格式日志。
    customlog "/[apache目录]/logs/$access.log" common
  5. 重启apache,使配置生效。
    /[apached目录]/httpd/bin/apachectl restart
  6. 查看“access.log”日志文件,可获取x-forwarded-for对应的客户端真实ip。

iis 6如何在访问日志中获取客户端真实ip

如果您的源站部署了iis 6服务器,您可以通过安装“f5xforwardedfor.dll”插件,从iis 6服务器记录的访问日志中获取客户端真实的ip地址。

  1. 下载模块。
  2. 根据您服务器的操作系统版本将“x86\release”或者“x64\release”目录中的“f5xforwardedfor.dll”文件拷贝至指定目录(例如,“c:\isapifilters”),同时确保iis进程对该目录有读取权限。
  3. 打开iis管理器,找到当前开启的网站,在该网站上右键选择“属性”,打开“属性”页面。
  4. 在“属性”页面,切换至“isapi筛选器”,单击“添加”,在弹出的窗口中,配置如下信息:
    • 筛选器名称”:“f5xforwardedfor”;
    • 可执行文件”:“f5xforwardedfor.dll”的完整路径,例如:“c:\isapifilters\f5xforwardedfor.dll”
  5. 单击“确定”,重启iis 6服务器。
  6. 查看iis 6服务器记录的访问日志(默认的日志路径为:“c:\windows\system32\logfiles\ ”,iis日志的文件名称以“.log”为后缀),可获取x-forwarded-for对应的客户端真实ip。

iis 7如何在访问日志中获取客户端真实ip

如果您的源站部署了iis 7服务器,您可以通过安装“f5xforwardedfor”模块,从iis 7服务器记录的访问日志中获取客户端真实的ip地址。

  1. 下载模块。
  2. 根据服务器的操作系统版本将“x86\release”或者“x64\release”目录中的“f5xffhttpmodule.dll”和“f5xffhttpmodule.ini”文件拷贝到指定目录(例如,“c:\x_forwarded_for\x86”或“c:\x_forwarded_for\x64”),并确保iis进程对该目录有读取权限。
  3. 在iis服务器的选择项中,双击“模块”,进入“模块”界面。
  4. 单击“配置本机模块”,在弹出的对话框中,单击“注册”。

  5. 在弹出的对话框中,按操作系统注册已下载的dll文件后,单击“确定”。
    • x86操作系统:注册模块“x_forwarded_for_x86”
      • 名称:x_forwarded_for_x86
      • 路径:“c:\x_forwarded_for\x86\f5xffhttpmodule.dll”

    • x64操作系统:注册模块“x_forwarded_for_x64”
      • 名称:x_forwarded_for_x64
      • 路径:“c:\x_forwarded_for\x64\f5xffhttpmodule.dll”

  6. 注册完成后,勾选新注册的模块(“x_forwarded_for_x86”或“x_forwarded_for_x64”)并单击“确定”。
  7. 在“isapi和cgi限制”中,按操作系统添加已注册的dll文件,并将其“限制”改为“允许”。
    • x86操作系统:
      • isapi或cgi路径:“c:\x_forwarded_for\x86\f5xffhttpmodule.dll”
      • 描述:x86
    • x64操作系统:
      • isapi或cgi路径:“c:\x_forwarded_for\x64\f5xffhttpmodule.dll”
      • 描述:x64
  8. 重启iis 7服务器,等待配置生效。
  9. 查看iis 7服务器记录的访问日志(默认的日志路径为:“c:\windows\system32\logfiles\ ”,iis日志的文件名称以“.log”为后缀),可获取x-forwarded-for对应的客户端真实ip。
分享:
网站地图