站点在使用Nginx反向代理后,就会定向转发到本地的服务端口。这时我们使用后台程序获取IP时发现取到的都是代理服务器的IP地址,而非真实的用户IP地址。登录我的代理和站点都在同一个服务器上,这里我们在后端获取到的就是127.0.0.1,这个显然不是我们想要的IP。

不管你后台使用的是何种语言,java,php,nodejs,.net或者netcore道理都是一样的。那么我们应该如何解决问题呢?其实要解决也很简单,前提你要理解反向代理自然就会想到解决办法。

nginx

 

如上图所示,我们只要在 nginx的转发参数中加入我们想要的信息即可实现我们的目的。这里的加参数一般指加到头上,header中。只需要在niginx配置中添加如下配置:

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

其中各参数的含义如下所示:

$http_host 包含用户访问的真实的域名和端口号;
$scheme表示用户使用的什么协议是http还是https;
$remote_addr表示用户访问的真实IP;
$proxy_add_x_forwarded_for表示的如果用户使用的是代理那么一般真实IP会包含在此字段中,主要用于代理网络的转发。

配置完成后,我们就可以在后台直接从request的header中取X-Real-IP的值 即为真实的访问IP,也可以把代理上网的这个判断加上,优先判断header中的X-Forwarded-For,为空再取X-Real-IP。

这就是lebang2020.cn带来的详细内容,有疑问可公众号内留言讨论。

网页地址:https://lebang2020.cn/details/210127jdutbtyf.html