Nginx多级代理统计客户端真实ip

前提概述:

         由于普通反向代理没加proxy_set_header X-Real-IP   $remote_addr; 后端服务器统计ip来源时显示的是前一个代理服务器的ip地址,比如109.1访问109.139没设置上面代理语句,后端109.140日志记录访问ip来源是109.139而不是真正的109.1 。

实验环境:

      

 

设置第一个代理服务器192.168.109.139

1、在192.168.109.139服务器主配置文件设置日志格式main

vim /usr/local/nginx/conf/nginx.conf

------------------------------------------------------------------------

  http {
        include       /usr/local/nginx/conf/mime.types;  #加载支持的文件类型
        default_type  application/octet-stream;          #没找到支持文件类型,默认以二进制流提>示下载

       #日志格式定义
        log_format  main  '(客户端ip: $http_x_real_ip )- $remote_addr - $remote_user [$time_local] "$request" '
                                   '$status $body_bytes_sent "$http_referer" '
                                  '"$http_user_agent" "代理服务ip组:$http_x_forwarded_for"';

          sendfile            on;
          tcp_nopush      off;
          tcp_nodelay     on;

          keepalive_timeout  10;

           #虚拟主机部分
           include  /usr/local/nginx/virtual/*.conf;

       }

扫描二维码关注公众号,回复: 4804082 查看本文章

     $http_x_real_ip 用于输出真实的ip信息

     $http_x_forwarded_for"    #用于输出代理服务器信息

2、在192.168.109.139服务器上虚拟主机配置文件如下: 

vim    /usr/local/nginx/virtual/gz2.com.conf

-------------------------------------------------------------------------------

     server {
              listen      80;
             server_name  www.gz2.com;
             charset utf-8;
             access_log  /data/web/gz2.com/logs/gz2.com.access.log  main;  #设置虚拟主机日志格式

             location / {
             root   /data/web/gz2.com;
             index  index.html index.htm;

             proxy_pass http://192.168.109.140;        #反向代理到后端服务器
             proxy_set_header X-Real-IP   $remote_addr;        #将真实客户端ip传给后端服务器
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         }

设置第二个代理服务器192.168.109.140

1、主配置main日志格式和第一个代理服务器一样

2、虚拟主机反向代理设置

      只需将前一个虚拟主机配置文件修改一下就可以

    proxy_pass http://192.168.109.140;改为proxy_pass http://192.168.109.141;

设置第三个代理服务器192.168.109.141

      1、主配置main日志格式和第一个代理服务器一样

      2、由于本服务器是最后的真实服务器所以不需要设置代理了

                server {
                       listen      80;
                       server_name  www.gz2.com;
                       charset utf-8;
                       access_log  /data/web/gz2.com/logs/gz2.com.access.log  main; #设置日志格式

                   location / {
                       root   /data/web/gz2.com;      #网站家目录
                       index  index.html index.htm;   #默认打开的文件类型
                        }


              }

测试一下结果:

     1、设置我的win7 hosts文件dns解析

             192.168.109.139 www.gz2.com

     2、浏览器测试:

             访问192.168.109.139 的www.gz2.com 成功代理到后端141的 网站

      

  3、  查看日志文件统计的ip情况

        192.168.109.139记录:请求来源是109.1

               

        192.168.109.140记录:请求来源时109.139,客户端真实ip为109.1

            如果只有一层代理X-Forwarded-For和X-Real-IP这两个头的值就是一样的。

        192.168.109.141 记录:请求来源是109.140,真实ip为109.1

              如果有多级代理真实ip为X-Forwarded-For 值的第一个值

 

猜你喜欢

转载自blog.csdn.net/qq_38228830/article/details/82951915