1. 程式人生 > >Nginx多級代理統計客戶端真實ip

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;

       }

     $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

        192.168.109.141 記錄:請求來源是109.140,真實ip為109.1