双层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。

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