今天是复工的第三天,做企业微信端的同事说,企业微信工单系统上传的图片解析不出来,通过查看数据发现了问题所在:
未使用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的地址截取的这篇博客的部门内容。