历史版本6 :HTTPS配置WebSocket 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 问题描述编辑

10.0HTTPS环境若不配置WebSocket,那么智能运维的实时内存图表空白,而且平台会登录信息失效,如下图:

15526213733TS7lSPX.png

2. 解决方案编辑

配置WebSocket:

找到报表服务器使用的配置数据库

1)如果没有迁移外置数据库,则在WEB-INF/embed/finedb下,那么参考hsql数据库连接方式修改hsql数据库中数据来新增下面的字段,或者直接使用dbeaver连接finedb来新增下面的字段。

2)如果迁移到外置数据库,那么可以直接使用 navicat 等数据库管理软件来新增下面的字段。

在 finedb 的 fine_conf_entity 表中添加以下4个字段:

  字段值  
WebSocketConfig.protocol ssl(默认)
WebSocketConfig.keyStore来自%TOMCAT_HOME%\conf\server.xml中的 keystoreFile 字段的值
WebSocketConfig.keyStorePassword证书密码
WebSocketConfig.keyStoreFormatJKS(默认) 

WebSocketConfig.keyStore和WebSocketConfig.keyStorePassword的配置如下图所示:
1552621740KJ9tUrzp.png

重启 Tomcat 服务器,这样智能运维的实时内存就可以正常显示了,如下图所示:

1552630099rNE4Jz59.png

3. 注意事项编辑

3.1 firefox设置不生效

1)问题描述

修改后火狐浏览器访问还是空白。这是因为自签名的证书不被 firefox 浏览器信任,页面能访问是因为手动添加了例外,但是38888端口没有,所以浏览器拦截了socket请求。

2)解决方案

F12看一下拦截的请求,复制下来,直接访问一下38888端口添加安全例外或者手动添加。

1552632213Ey2N4v2s.png
1552632230ReRczyKU.png

这样火狐浏览器就可以查看实时内存了,如下图所示:

1552632336hewk50V0.png

3.2 不额外给websocket开端口

1)问题描述

现在 websocket 采用的是 netty-socketio,它有一个问题就是需要另开一个新的端口,在一些特定情况下,客户出于安全考虑或者其他原因,不能为工程多开一个端口,这种情况下后台的 socket 服务不能成功启动,造成 socket 连接失败,从而导致平台的部分功能使用有问题。

那么如何在只开放一个端口的情况下解决上述问题呢?

2)解决方案

在 finedb 的 fine_conf_entity 表中添加一个字段:

字段
WebSocketConfig.requestPort80

nginx 监听 server 下加上如下内容:、

...
server {
        listen 80;#监听端口,这个要和上面的WebSocketConfig.requestPort一致
        server_name _;
        underscores_in_headers on;
 
        location / {
            proxy_http_version 1.1;
            proxy_pass http://FR.com;
            proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header non_idempotent;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Connection "";
            #proxy_set_header X-Forwarded-Proto "https";
            proxy_connect_timeout 20;
            proxy_read_timeout 1000;
            proxy_send_timeout 300;
        }
        #这里匹配/socket.io/转发给websocket的upstream
        location ^~ /socket.io/ {
            proxy_pass http://WBS.com;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_connect_timeout 20;
            proxy_read_timeout 1000;
            proxy_send_timeout 300;
        }
        ...
}
...

最后,重启 nginx 和报表工程即可。