首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
undertow 服务器 使用cloudflare https问题
mr_wangyan
2020-12-22 13:02
项目本身没有证书,全靠cloudflare的https。所以我undertow没有配置https,但是项目每次重启都会跳转到xxx.com:80,要手动删掉:80才能正常访问。请问这个问题怎么解决?
项目:
JFinal
1
1
评论区
JFinal
2020-12-22 14:50
"项目每次重启都会跳转到xxx.com:80" 这句不知道是什么意思, 不知道细节,到底是如何跳转的?
回复
mr_wangyan
2020-12-22 22:19
@JFinal
就是我本来一个网址运行的好好的 比如正在访问。 https://www.abc.com/index 但我这个https不是用的证书,我在nginx里还是配 proxy_pass http://127.0.0.1:1888/; cloudflare里配一下就可以https了。当我重新发布项目java -jar运行undertow的项目后,f5刷新页面,url会变成https://www.abc.com:80/index 然后这个页面就无法显示,要删掉:80才能正常访问。
回复
JFinal
2020-12-22 22:54
@mr_wangyan
先检查一下,请求是不是被重定向了,检查步骤:
1:先打开浏览器 chrome 的开发者工具窗口,点击 Network 标签
2:重现一次这个问题,看请求中是不是出现了 302 与 301 重定向请求。如果没有发生,状态码是 200
回复
JFinal
2020-12-22 22:57
我暂且猜测你碰到的是一个重定向的问题,在 nginx 配置 proxy_pass 的同一个配置块中添加如下配置:
# 解决 https 重定时向回到了 http 的问题
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
上面的配置将支持 jfinal 的 redirect(...) 重定向到正确的端口号
注意,这个配置要是比较高的 jfinal 版本才会有用
回复
mr_wangyan
2020-12-23 10:06
@JFinal
哇,波总真厉害。问题解决了,爱你(づ ̄3 ̄)づ╭❤~
回复
JFinal
2020-12-23 11:42
@mr_wangyan
这个问题其实是 jfinal 之外的事情,但为了帮你省时间,jfinal 还是添加了点代码,解决了这个问题
这个问题的原因如下:
1:使用 nginx 代理 https 也就是 443 端口
2:nginx 与 jfinal 项目通信的通道并不是 443 端口,而是像你项目中用到的 1888 类似的其它端口
3:当你在 jfinal 中使用 rendirect(url) 做重定向的时候, jfinal 获取到的端口号必然只能是 1888,因为 nginx 与之通信的确用的是 1888
4:所以说 443 这个端口号对于 jfinal 项目来说是透明的,无法感知的
5:解决办法自然就出来了,通过在 nginx 中配置 proxy_set_header X-Forwarded-Port $server_port; 将 443 这个端口号通过 http 的 header 中传递过去
6:最终 jfinal 的 RediectRender 优先获取一下 X-Forwarded-Port 的值,如果获取到,那么重定向就优先使用该端口
回复
mr_wangyan
2020-12-23 11:56
@JFinal
学到了,感谢波总的指点。
回复
发送
我要反馈
热门反馈
扫码入社