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