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

最近更新时间:2018-05-16 13:02:40

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

  • 由于4层负载均衡(TCP协议)服务可以直接在后端KEC上获取来访者真实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。

TB1qCmLIpXXXXaeXFXXXXXXXXXX.png

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

TB13pGCIpXXXXbEXVXXXXXXXXXX.png

3、然后重启tomcat即可。

测试结果如下:

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

TB155yGIpXXXXXiXVXXXXXXXXXX.png

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

注册有礼