expressjs获去请求IP问题
在实际开发中遇到这样的情况,比如一些外企企业,使用了网络代理,我在后端获取IP,发现存在空的情况。
分析下,原因如下:
当我们应用设定了信任代理的时候,直接使用req.ip
获取的会是客户端的真实IP,但是信任代理的话,代理是会修改XXF头部信息的,比如
我遇到的情况就是代理修改请求头,导致我获取的req.ip
为空,其实代理改了头,隐藏了真实客户端IP的话,的确我们是不可能得到真实的客户端IP了,但是代理本身的IP还是可以得到的,所以,我就封装了我自己的获取IP方法,
1 | /** |
这个方案主要是弥补了我单纯使用req.ip获取客户端IP,会存在空的问题。
当然我们也可以设定不信任代理,但是这样子就意味着只获取客户端IP,永远不会知道代理环节的IP,所以代理信任设定,要看实际场景了。
app.enabled(‘trust proxy’)
当设定了信任代理时,express会获得客户端连接请求中的IP地址。
req.ip
使用req.ip
获取请求IP地址,当设定了信任代理时,这个值会是X-Forwarded-For header中的最左边值。
1 | req.ip |
req.ips
当设定了信任代理时,这个值会是个IP地址数组,req.ips会是这样 ["client", "proxy1", "proxy2"]