乐趣区

关于网络:7个获取访问者真实IP的方法速学

通常状况下,网站拜访并不是简略地从用户的浏览器中转服务器,两头可能部署有 CDN、WAF、高防。例如,采纳这样的架构:“用户 > CDN/WAF/ 高防 > 源站服务器”。那么,在通过多层代理之后,服务器如何获取发动申请的实在客户端 IP 呢?

一个通明的代理服务器在把用户的 HTTP 申请转到下一环节的服务器时,会在 HTTP 的头部中退出一条“X-Forwarded-For”记录,用来记录用户的实在 IP,其模式为“X-Forwarded-For:访问者的实在 IP,代理服务器 1 -IP,代理服务器 2 -IP,代理服务器 3 -IP,……”。

因而,访问者的实在 IP 能够通过获取 “X-Forwarded-For” 对应的第一个 IP 来失去。

如果您曾经应用 Web 利用防火墙服务,可间接通过 WAF 服务获取访问者的实在 IP,也能够通过配置网站服务器来获取访问者的实在 IP。以下别离介绍通过 WAF 间接获取实在 IP 的办法,以及针对 Tomcat、Apache、Nginx 和 IIS 服务器,相应的 X -Forwarded-For 配置计划及获取实在 IP 的办法。

通过 WAF 间接获取实在 IP

WAF 默认提供获取客户端实在 IP 的性能,上面举荐两种形式获取客户的起源 IP,依据您的须要,两种形式可二选一:

  • WAF 服务应用 X -Forwarded-For 的形式获取客户端的实在 IP 地址。

实在的客户端 IP 会被 WAF 服务放在 HTTP 头部的 X -Forwarded-For 字段,格局如下:

X-Forwarded-For: 用户实在 IP, 代理服务器 1 -IP,代理服务器 2 -IP,…

当应用此形式获取客户端实在 IP 时,获取的第一个地址就是客户端实在 IP。

各种语言通过调用 SDK 接口获取 X -Forwarded-For 字段的形式:

  • ASP:

Request.ServerVariables(“HTTP_X_FORWARDED_FOR”)

  • ASP.NET(C#)

Request.ServerVariables[“HTTP_X_FORWARDED_FOR”]

  • PHP:

$_SERVER[“HTTP_X_FORWARDED_FOR”]

  • JSP:

request.getHeader(“HTTP_X_FORWARDED_FOR”)

  • WAF 服务还反对应用 X -Real-IP 变量,获取客户的起源 IP(应用过程中思考了前面通过的多层反向代理对该变量的批改)。

各种语言通过调用 SDK 接口获取 X -Real-IP 字段的形式:

  • ASP:

Request.ServerVariables(“HTTP_X_REAL_IP”)

  • ASP.NET(C#)

Request.ServerVariables[“HTTP_X_REAL_IP”]

  • PHP:

$_SERVER[“HTTP_X_REAL_IP”]

  • JSP:

request.getHeader(“HTTP_X_REAL_IP”)

Tomcat 如何在拜访日志中获取实在客户端的 IP 地址(集体举荐)

如果您的源站部署了 Tomcat 服务器,可通过启用 Tomcat 的 X -Forwarded-For 性能,获取访问者的实在 IP 地址。

  • 关上 server.xml 文件(“tomcat/conf/server.xml”),AccessLogValve 日志记录性能局部内容如下:

<Host name=”localhost” appBase=”webapps” unpackWARs=”true” autoDeploy=”true”>

<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”

prefix=”localhost_access_log.” suffix=”.txt”

pattern=”%h %l %u %t “%r” %s %b” />

  • 在 pattern 中减少“%{X-Forwarded-IP}i”,批改后的 server.xml 为:

<Host name=”localhost” appBase=”webapps” unpackWARs=”true” autoDeploy=”true”>

<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”

prefix=”localhost_access_log.” suffix=”.txt”

pattern=“%{X-Forwarded-For}i %h %l %u %t “%r” %s %b” />

</Host>

  • 查看 localhost_access_log 日志文件,可获取 X -Forwarded-For 对应的访问者实在 IP。

Apache 如何在拜访日志中获取实在客户端的 IP 地址

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

  • 执行以下命令装置 Apache 的一个第三方模块 mod_rpaf。

wget http://stderr.net/apache/rpaf…_rpaf-0.6.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

  • 关上 httpd.conf 配置文件,并将文件内容批改为如下内容:

LoadModule rpaf_module modules/mod_rpaf-2.0.so ## 加载 mod_rpaf 模块

<IfModule mod_rpaf.c>

RPAFenable On

RPAFsethostname On

RPAFproxy_ips 127.0.0.1 < 反向代理 IPs>

RPAFheader X-Forwarded-For

</IfModule>

  • 定义日志格局。

LogFormat “%{X-Forwarded-For}i %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”” common

  • 启用自定义格局日志。

CustomLog “/[apache 目录]/logs/$access.log” common

  • 重启 Apache,使配置失效。

/[apached 目录]/httpd/bin/apachectl restart

  • 查看 access.log 日志文件,可获取 X -Forwarded-For 对应的访问者实在 IP。

Nginx 如何在拜访日志中获取实在客户端的 IP 地址

如果您的源站部署了 Nginx 反向代理,可通过在 Nginx 反向代理配置 Location 信息,后端 Web 服务器即可通过相似函数获取客户的实在 IP 地址。

  • 依据源站 Nginx 反向代理的配置,在 Nginx 反向代理的相应 location 地位配置如下内容,获取客户 IP 的信息。

Location ^ /<uri> {

proxy_pass ….;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

  • 后端 Web 服务器通过相似函数获取客户的实在 IP。

request.getAttribute(“X-Forwarded-For“)

IIS 6 如何在拜访日志中获取实在客户端的 IP 地址

如果您的源站部署了 IIS 6 服务器,您能够通过装置“F5XForwardedFor.dll”插件,从 IIS 6 服务器记录的拜访日志中获取访问者实在的 IP 地址。

1. 下载并装置“F5XForwardedFor.dll”插件。

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. 下载并装置“F5XForwardedFor”模块。

2. 依据服务器的操作系统版本将“x86\Release”或者“x64\Release”目录中的“F5XFFHttpModule.dll”和“F5XFFHttpModule.ini”文件拷贝到指定目录(例如,“C:\x_forwarded_for\x86”或“C:\x_forwarded_for\x64”),并确保 IIS 过程对该目录有读取权限。

3. 在 IIS 服务器的选择项中,双击“模块”,进入“模块”界面。

4. 单击“配置本机模块”,在弹出的对话框中,单击“注册”,按操作系统抉择“注册模块”注册已下载的 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”

5. 注册实现后,勾选新注册的模块(“x_forwarded_for_x86”或“x_forwarded_for_x64”)并单击“确定”。

6. 在“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

7. 重启 IIS 7 服务器,期待配置失效。

8. 查看 IIS 7 服务器记录的拜访日志(默认的日志门路为:“C:\WINDOWS\system32\LogFiles\”,IIS 日志的文件名称以“.log”为后缀),可获取 X-Forwarded-For 对应的访问者实在 IP。

点击关注,第一工夫理解华为云陈腐技术~

退出移动版