全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

七层负载均衡后端主机获取用户的真实IP方法

最近更新时间:2021-02-01 10:06:24

apache、nginx、tomcat 日志中获取用户的真实IP方法

  • 由于 4 层负载均衡( TCP 协议)服务可以直接在后端服务器上获取来访者真实 IP 地址,无需进行额外的配置,以下介绍的内容均是针对 7 层( HTTP 协议)的负载均衡服务而言。
  • 7 层负载均衡系统提供 X-Forwarded-For 的方式获取访问者真实 IP ,LB 侧默认开启,需要后端服务做相应配置来获取 client ip 。
    以下针对常见的应用服务器配置方案进行介绍。

Apache配置方案

Windows 2003 Server + Apache 解决方案:

  1. 打开文件:\apache\conf\httpd.conf。

  2. 在文件中查找:”CustomLog”,找到如下配置块: 查看到当前使用的LogFormat为”combined”(如果实际启用的为其他日志格式,替换相应的格式定义即可)。

  3. 在文件中查找:”LogFormat”,找到如下配置块(combined格式定义):

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

将其修改为:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"  \"%{X-Forwarded-For}i\"" combined
  1. 保存并关闭文件 \apache\conf\httpd.conf。

  2. 重启 Apache 服务。

Linux + Apache 解决方案:

  1. 打开文件:/etc/httpd/conf/httd.conf。

  2. 在文件中查找:”CustomLog”,找到如下配置块: 查看到当前使用的 LogFormat 为”combined” (如果实际启用的为其他日志格式,替换相应的格式定义即可)。

#
# For a single logfile with access, agent, and referer information
# (Combined Logfile Format), use the following directive:
#
CustomLog  logs/access_log combined
  1. 在文件中查找:”LogFormat”,找到如下配置块(combined格式定义):
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

将其修改为:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Forwarded-For}i\" " combined
  1. 保存并关闭文件 /etc/httpd/conf/httd.conf。

  2. 重启 Apache 服务。

2. Nginx 配置方案

解决方案如下:

  1. 打开文件:/etc/nginx/nginx.conf。

  2. 在文件中查找:”CustomLog”,找到如下配置块:

server {
        listen   80; ## listen for ipv4
        listen   [::]:80 default ipv6only=on; ## listen for ipv6
        server_name  localhost;
        access_log  /var/log/nginx/localhost.access.log main;
  1. 将 access_log 这一行替换为如下内容:
log_format main '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $body_bytes_sent "$http_referer" '
               '"$http_user_agent" "$http_x_forwarded_for"' ;
  access_log /var/log/nginx/localhost.access.log  main;
  1. 保存并关闭文件 /etc/nginx/nginx.conf。

  2. 重启 Nginx 服务。

Tomcat 日志中获取访客真实IP的解决方案

  1. 修改 tomcat 的 server.xml ,如:vi /usr/local/tomcat7/conf/server.xml。

TB1qCmLIpXXXXaeXFXXXXXXXXXX.png

  1. 修改 pattern 为 pattern=’%{X-Forwarded-For}i %h %l %u %t “%r” %s %b’,则会记录 headers 头中的 X-Forwarded-For 信息。

TB13pGCIpXXXXbEXVXXXXXXXXXX.png

  1. 然后重启 tomcat 即可。

测试结果如下:

本次测试中 100.97 是修改前的 slb 内网地址,182.92 是修改后的获取的真实地址。

TB155yGIpXXXXXiXVXXXXXXXXXX.png

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈