转自:http://blog.itpub.net/27043155/viewspace-734234/html
经过这个模块容许咱们改变客户端请求头中客户端IP地址值(例如,X-Real-IP 或 X-Forwarded-For)。前端
若是Nginx工做在某些7层负载均衡代理后面,这个功能对于Nginx服务器很是有用,因为客户端请求的本地IP(就是客户端的请求地址)在经过7层代理时被添加了客户端IP地址头,所以才使得后端的Nginx可以取得震慑客户端的IP地址值。该模块在默认安装是并无安装,所以若是要使用该模块,那么在编译安装是须要添加--with-http_realip_module选项。后端
为何使用该模块,它的意义在于可以使得后台服务器记录原始客户端的IP地址。服务器
set_real_ip_from 192.168.1.0/24;负载均衡 set_real_ip_from 192.168.2.1;测试 real_ip_header X-Real-IP;ui |
该模块仅提供了两条指令。spa
指令名称:set_real_ip_from.net
功 能:经过该指令指定信任的地址,将会被替代为精确的IP地址。从0.8.22版本后也可使用信任的Unix套接字。这里设置的IP就是指前端Nginx 、Varnish或者 Squid 的 IP地址。代理
语 法: set_real_ip_from [the address|CIDR|"unix:"]
默 认 值: none
使用环境: http, server, location
指令名称:real_ip_header
功 能:这个指令用于设置使用哪一个头来替换IP地址。若是使用了X-Forwarded-For,那么该模块将会使用X-Forwarded-For头中的最后一个IP地址来替换前端代理的IP地址。
语 法: real_ip_header [X-Real-IP|X-Forwarded-For]
默 认 值: real_ip_header X-Real-IP
使用环境: http, server, location
在下面的实例中,咱们环境是这样的有两台Nginx服务器,一台是前端,另外一台是后端,前端的Nginx被用做代理,然后台的Nginx用于提供页面访问,还有一台客户端,IP地址以下:
前端Nginx:192.168.7.10
后端Nginx:192.168.1.15
客户端主机:218.239.201.36
前端的Nginx配置是这样的:
server { listen 80; server_name www.xx.com;
location / { root html; index index.html index.htm; charset utf-8; }
location /865 { proxy_pass http://192.168.3.139:80/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_redirect off; }
…… }
|
后端的Nginx配置以下:
server { listen 80; server_name localhost;
location / { root /var/www/html; index index.html index.htm; } |
访问测试
若是咱们访问http://www.xx.com/865,没问题,能够是正常访问,访问日志以下:
前端Nginx的日志:
218.239.201.36 - - [30/Aug/2011:16:09:56 +0800] "GET /865/ HTTP/1.1" 200 151 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1" |
后端Nginx的日志:
192.168.7.10 - - [30/Aug/2011:16:09:56 +0800] "GET // HTTP/1.0" 200 151 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1" |
咱们看到在后端Nginx的日志中并无记录原始客户端的IP地址,而是记录了前端Nginx的IP地址。
若是将后台Nginx服务器的配置修改成:
server { listen 80; server_name localhost; set_real_ip_from 192.168.3.0/24; set_real_ip_from 100.100.0.0/16; real_ip_header X-Real-IP;
location / { root html; index index.html index.htm; }
…… }
|
而后咱们再次进行访问测试:
前端Nginx的日志:
218.239.201.36 - - [30/Aug/2011:16:10:28 +0800 "GET /865/ HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1" |
后端Nginx的日志:
218.239.201.36 - - [30/Aug/2011:16:10:28 +0800] "GET // HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1" |
可见,此次后台记录的是客户端的IP地址。