雙層nginx代理獲取真實訪問ip

 環境介紹:

  兩臺nginx代理服務器,第一臺接收真實客戶端的請求,然後調度到第二臺nginx代理服務器上,最後調度到web後端。

  需求:

   因爲第二臺nginx是接收第一臺nginx的請求,所以默認情況下日誌記錄的全部是第一臺nginx的ip訪問,現在在要求第二臺nginx的訪問日誌能夠記錄真實客戶端的ip。

第一臺nginx配置:

  1. worker_processes  1; 
  2. error_log  logs/error.log  notice; 
  3. pid        logs/nginx.pid; 
  4. worker_rlimit_nofile 65535; 
  5. events { 
  6.     use epoll; 
  7.     worker_connections  65535; 
  8.  
  9. http { 
  10.     include       mime.types; 
  11.     default_type  application/octet-stream; 
  12.     keepalive_timeout  65; 
  13.  
  14.     proxy_temp_path   /data0/proxy_temp_path; 
  15.     proxy_cache_path  /data0/proxy_cache_path  levels=1:2   keys_zone=cache:128m inactive=1d max_size=1g
  16.  
  17.     upstream hdwiki { 
  18.         server 192.168.253.105; 
  19.         } 
  20.  
  21.  
  22.     server { 
  23.         listen       80; 
  24.         server_name  www.hdwiki.com; 
  25.         index index.html index.htm; 
  26.  
  27.         location / 
  28.         { 
  29.                  proxy_set_header Host  $host; 
  30.                  proxy_set_header X-Forwarded-For  $remote_addr; 
  31.                  proxy_pass http://hdwiki; 
  32.         } 
  33.  
  34.         access_log   logs/access_hdwiki.log; 
  35.         } 

proxy_set_header Host  $host; 把訪問的域名加到請求包的頭部信息中,能夠找到後端web的虛擬主機。

proxy_set_header X-Forwarded-For  $remote_addr; 把客戶端真是ip地址加到請求包的頭部信息中,以X-Forwarded-For做標示。

 

第二臺nginx配置:

首先在編譯的時候加上--with-http_realip_module這個模塊。

參考:http://wiki.nginx.org/HttpRealIpModule

  1. worker_processes  1; 
  2. #error_log  logs/error.log  notice; 
  3. pid        logs/nginx.pid; 
  4. worker_rlimit_nofile 65535; 
  5. events { 
  6.     use epoll; 
  7.     worker_connections  65535; 
  8.  
  9. http { 
  10.     include       mime.types; 
  11.     default_type  application/octet-stream; 
  12.     keepalive_timeout  65; 
  13.  
  14.     proxy_temp_path   /data0/proxy_temp_path; 
  15.     proxy_cache_path  /data0/proxy_cache_path  levels=1:2   keys_zone=cache:128m inactive=1d max_size=1g
  16.  
  17.     upstream hdwiki { 
  18.         server 192.168.253.105:8090; 
  19.         } 
  20.  
  21.  
  22.     server { 
  23.         listen       80; 
  24.         server_name  www.hdwiki.com; 
  25.         index index.html index.htm; 
  26.  
  27.         location / 
  28.         { 
  29.                  proxy_set_header Host  $host; 
  30.                  proxy_set_header X-Forwarded-For  $remote_addr; 
  31.                  set_real_ip_from   192.168.253.103; 
  32.                  real_ip_header     X-Forwarded-For; 
  33.                  proxy_pass http://hdwiki; 
  34.         } 
  35.  
  36.         access_log   logs/access_hdwiki.log; 
  37.         } 

set_real_ip_from   192.168.253.103; 第一臺nginx的ip的地址,指定真實ip來自哪兒。

real_ip_header     X-Forwarded-For; 從第一臺nginx上獲取客戶端的ip,因爲真實客戶端的ip已經在第一臺nginx設置中被X-Forwarded-For標示,所以衝header頭中提取它。

這樣就能在第二臺nginx代理服務器的訪問日誌中看到真實客戶端訪問ip。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章