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

最近更新时间:2020-06-03 14:30:21

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

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

1. 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

4、保存并关闭文件 \apache\conf\httpd.conf。

5、重启 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

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

4、保存并关闭文件 /etc/httpd/conf/httd.conf。

5、重启 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;

3、将 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;

4、保存并关闭文件 /etc/nginx/nginx.conf。

5、重启 Nginx 服务。

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

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

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

2、修改 pattern 为 pattern='%{X-Forwarded-For}i %h %l %u %t "%r" %s %b',则会记录 headers 头中的 X-Forwarded-For 信息。

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

3、然后重启 tomcat 即可。

测试结果如下:

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

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

金山云,开启您的云计算之旅

免费注册