服务端获取真实客户端IP,在日常项目中也常会出现这种需求,如果我们使用了反向代理服务,很有可能就在一些特殊的情况下就无法获取到真实的客户端IP;这个时候就需要我们在Nginx反向代理服务中加入一些配置来提供真实的客户端IP。
在配置之前,我们还要去讲一下Nginx中内置变量主要有哪些,分别有放置着什么样的值有什么样的作用。
nginx内置变量
$arg_name
: 请求参数中的参数名称,如果?name=123,$arg_name
取到的值就是name
了。
$args
: 请求参数中的参数值。
$content_length
:请求头的content_length。
$content_type
:请求头的content_type。
$cookie_name
:cookie名称。
$hostname
:主机名称。
$remote_addr
:客户端地址,记住这个参数,一会我们就要用到了。
$remote_port
:客户端端口。
$remote_user
:用于http基础认证服务的用户名。
$request
:代表客户端的请求地址。
$server_addr
:服务器端地址。
$server_name
:服务器端名称,例如域名。
$server_port
:服务器端端口。
配置获取客户端真实IP
我们通常在Java后端获取客户端IP的方式是 request.getRemoteAddr()
,但是如果我们使用了Nginx或者是其他的反向代理服务器。
就会导致这个方法取到的值不准确,甚至取不到,所以,我们就需要在反向代理服务器上做一些‘手脚’。
如何做呢,这时候就需要我们的nginx内置变量出场了,来看一下吧。
$remote_addr
:客户端地址;
就是这个了,这个参数代表着你从客户端访问Nginx反向代理服务的地址,将这个参数传输给服务端就ok了。
配置如下:
server{ .......这就不写了,只写重点。 location / { proxy_set_header X-Real-IP $remote_addr; proxy_pass http:www.test.com; } }
如此配置的话,我们就可以在后台利用request.getHeader('X-Real-IP')来获取了;