HTTPS代理访问DataGear登录失败的问题

HTTPS代理访问DataGear登录失败的问题

朱治龙
2024-08-19 / 2 评论 / 56 阅读 / 正在检测是否收录...

背景说明

在一些项目中我们有用到 DataGear 来做大屏展示,将 DataGear 部署到产线后,发现通过HTTPS协议访问应用正常,但是登录的时候,账号密码正确的情况下,提示Error,如下图所示:
DataGear 登录异常

问题分析

打开浏览器开发者工具,查看网络请求,我们发现登录的时候请求的 https://xxx.com/login/doLogin ,登录成功后 302 重定向到了 http://xxx.com/login/success 地址,由于HTTP协议不一致,存在跨域,导致Ajax无法正常获取到响应数据:

登录问题分析

部署说明

DataGear 使用 Docker 部署,使用 Nginx 配置SSL代理对外提供服务。

问题修复

通过前面的分析,我想可能是 Nginx 到 DataGear 的过程中在登录的时候网络协议丢失了,通过查找SpringBoot 的官方文档,有找到如下章节:14.3. Enable HTTPS When Running behind a Proxy Server。从标题我们就可以看到,这就是我们碰到的使用场景:
Enable HTTPS When Running behind a Proxy Server

根据提示也是跟代理的一些HTTP头信息相关,我们根据提示,在datagear-web 工程的 application.properties 文件中,添加了如下配置信息:

# 处理https重定向不正确的问题
server.tomcat.remoteip.protocol-header=X-Forwarded-Proto
server.tomcat.remoteip.remote-ip-header=X-Forwarded-For

重新构建Docker镜像并重新运行DataGear容器,然后在nginx 代理配置中添加如下设置代理头信息:

proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto      $scheme;

如果使用 Nginx Proxy Manager ,可以在 ProxyHost 中,将上面的代理配置信息加入到自定义Nginx配置中,如下图所示:
Nginx Proxy Manager 添加HTTP头信息

保存重启Nginx后,重新登录可以看到,能响应正确的重定向地址,至此HTTPS代理登录问题完美解决:
m0167iss.png

1

评论 (2)

取消
  1. 头像
    TranscodeTalker
    Windows 10 · FireFox

    小朱你好,
    我想你应该是直接部署反向代理才会这样,我也会学习一下你的思路。

    如果要启用原生https, 可以参考spring boot文档
    根据他们企业版的文档, http://www.datagear.tech/pro/docs/#config-https

    先用jdk工具生成ssl证书,接着修改某个叫application.properties的文件就可以启用https
    server.ssl.key-store=file:【证书文件存储目录】/datagear.jks
    server.ssl.key-store-password=【store密码】
    server.ssl.key-password=【key密码】

    store密码和key密码必须一致

    重新启动datagear 即可开启https

    回复
    1. 头像
      朱治龙 作者
      Windows 10 · Google Chrome
      @ TranscodeTalker

      是的,用的nginx做反向代理,原生启用https的话不存在这个问题。不过在大多数生产环境部署应用的时候还是习惯将Java应用部署在内网,然后通过nginx代理的方式对外提供服务

      回复