nginx做反向代理时,要想让后段的realserver获得客户端的ip,nginx要做什么设置

nginx做反向代理时,要想让后段的realserver获得客户端的ip,nginx要做什么设置,第1张

在location 中增加配置 proxy_set_header X-real-ip $remote_addr;
在web端通过requestgetAttribute("X-real-ip")可以获取到客户端真实IP

在location里增加以下配置
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

将 NGINX 配置为 >

Nginx proxy_set_header
允许重新定义或添加字段传递给代理服务器的请求头。该值可以包含文本、变量和它们的组合。在没有定义proxy_set_header时会继承之前定义的值。默认情况下,只有两个字段被重定义:

如果启用缓存,来自之前请求的头字段“If-Modified-Since”, “If-Unmodified-Since”, “If-None-Match”, “If-Match”, “Range”, 和 “If-Range” 将不会被代理服务器传递。
一个不会变化的“Host”头请求字段可通过如下方式被传递:

然后,当字段不在请求头中就无法传递啦。在这种情况下,可通过设置Host变量,将需传递值赋给Host变量。

此外,服务器名称和端口一起通过代理服务器传递。

如果请求头的存在空的字段将不会通过代理服务器传递出去。

总结:proxy_set_header 就是可设置请求头-并将头信息传递到服务器端。不属于请求头的参数中也需要传递时 重定义下就行啦。

测试jsp 想获取客户端IP、客户端port、代理服务器IP、代理服务器port

测试结果

Nginx日志

其中客户端IP不能获取到,而通过requestgetRemoteAddr();获取的IP是代理服务器IP,而不是客户端IP,而在nginx中$remote_addr变量的值是客户端的IP,可见remoteaddr没有传递。
而server_port值也不对,当前值为5800,当前打印出的是80。
而当前代理为 >

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10272909.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存