通过修改nginx配置获取客户端实际ip及获取项目域名的配置

今天是复工的第三天,做企业微信端的同事说,企业微信工单系统上传的图片解析不出来,通过查看数据发现了问题所在:
未使用nginx之前的图片保存路径为
http://www.******.cn /getPic/1575960369903.jpg
使用nginx之后的图片保存路径为:
http://127.0.0.1/getPic/1575960369903.jpg
java代码中获取域名的方法为:

request.getScheme() + "://" + request.getServerName()

通过查询博客资料,通过修改nginx配置解决了域名获取错误的问题,修改的内容如下:

server {
    listen 80;	    
        #项目所指向的域名地址
        server_name  www.****.cn ****.cn;
        location / {
        #禁止所有的proxy_redirect指令
		proxy_redirect off;	
		# 转发host的信息,如果不设置host,在后台使用request.getServerName()取到的域名不是www.****.cn,而是127.0.0.1 
		proxy_set_header Host $host;
		 # 因Discuz! 为了安全,需要获取客户端User-Agent来判断每次POST数据是否跟第一次请求来自同1个浏览器,  
       # 如果不转发User-Agent,Discuz! 提交数据就会报"您的请求来路不正确,无法提交"的错误  
		proxy_pass_header User-Agent; 
		#nginx代理的真是项目地址
        proxy_pass http://127.0.0.1:8080; 		
        #获得用户的真实ip
		proxy_set_header X-Real-IP $remote_addr;
		#真实主机名  具体作用暂时没查到资料
		proxy_set_header REMOTE-HOST $remote_addr;
		#用以转发客户端的真实ip地址;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }       
}

在java代码中获取客户端ip的方法也要进行变更:
未使用nginx代理之前的代码为:

request.getRemoteAddr();

使用nginx代理之后的代码为:

request.getHeader("x-forwarded-for");

通过如上代码的修改,系统重新恢复了原有的功能;对于修改的字段含义,主要参照了以下博客,再此对博客的博主表示感谢。

server_name 的用法,参考nginx 配置的server_name参数
proxy_redirect的用法,参考nginx 之 proxy_redirect详解
Host & User-Agent的问题,参考Host & User-Agent详解

proxy_set_header REMOTE-HOST $remote_addr
暂时未查到相关资料。

2020612,新查询到一个获取真实ip和域名方法,更加简单方便,在yml文件中,配置tomcat属性就可以继续使用原来的方法获取所需要的信息了。
nginx代理后获取真实访问ip的问题
学习的Nginx反向代理websocket协议的情况使用springboot项目获取客户端ip的地址截取的这篇博客的部门内容。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值