如何用nginx得到客户端ip

来源:互联网 发布:网络作家花千骨作者 编辑:程序博客网 时间:2024/06/03 21:07

在架构中加装nginx常常会使服务取ip出现问题,让nginx直接支持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支持标准的x_forwarded_for,在某些情况下,可以用:

proxy_set_header X-Forwarded-For "$ip";
不把nginx机器的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就是正确的。

本文来自: E点废墟(www.xok.la) 详细出处参考:http://xok.la/2009/05/nginx_x_forwarded_for_ip.html

0 0
原创粉丝点击