Nginx Web服务器在使用的时候常常会使服务取ip出现问题,让Nginx Web服务器直接支持x_forwarded_for是其中一种解决方案。那么我们要如何才能使用这样的方案呢?
- set $ip $http_x_forwarded_for;
- if ($ip ~ ^$ )
- {
- set $ip $remote_addr;
- }
- proxy_set_header X-Forwarded-For "$ip, $server_addr";
用这段代码就可以让Nginx Web服务器支持标准的x_forwarded_for,在某些情况下,可以用:
- proxy_set_header X-Forwarded-For "$ip";
不把Nginx Web服务器机器的ip地址加进去。
附:x_forwarded_for取ip的正确方式
x_forwarded_for是将请求路过的代理服务器的ip都记录下来的一条字符串,每经过一个代理服务器,x_forwarded_for就会在它的后面加上这个代理服务器的ip地址。常见的:
119.120.112.157, 61.135.253.11
这样就表示请求经过了一个代理服务器61.135.253.11。
119.120.112.157, 61.135.253.11, 192.168.0.13
经过了两个代理服务器61.135.253.11和192.168.0.13。
这样看起来取***个ip地址就是正确的,不过这比较草率:
192.168.0.1, 119.120.112.157, 61.135.253.11, 192.168.0.13
可以看到会有这样的x_forwarded_for地址,这是因为用户在反向代理前,还用了一个正向代理上网,这时取***个的话就是192.168.0.1,显然是不正确的。正确的取法应该是:取倒数***个非服务器ip,在例子中61.135.253.11, 192.168.0.13,这两个ip都是服务器用的ip,除去这两个,倒数***个119.120.112.157就是正确的。
【编辑推荐】