webSocket(wss)出现连接失败的问题解决方法

前言

前段时间用Letsencrypt提供一个称为certbot的工具,生成了HTTPS证书
升级https后,原先的websocket项目不能有效运行了。。。。

相关技术:linux(centos7.9)/nginx/websocket
1.这是升级https后的nginx配置

server {
        server_name 你的域名;
        location / {
                root /www/client/WebSocket-master/src;
                index client1.html;
        }

        location /chat/ {
                root /www/client/WebSocket-master/src;
                index client2.html;
        }

    listen 443 ssl; # managed by Certbot
    ssl_certificate 改为自己申请得到的 crt 文件路径; # managed by Certbot
    ssl_certificate_key 改为自己申请得到的 key 文件路径; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot



}
server {
    if ($host = 你的域名) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80;
        server_name 你的域名;
    return 404; # managed by Certbot


}

2.这是websocket服务升级https之前,使用ws连接发生的错误
这是升级https之前,使用ws连接发生的错误
3.这是将连接方式改为wss后的报错

ws = new WebSocket('wss://ip:端口');

这是将连接方式改为wss后的报错
4.需要更改nginx配置和websocket连接方式

ws = new WebSocket('wss://域名');
server {
        server_name 你的域名;
        location / {
                root /www/client/WebSocket-master/src;
                index client1.html;
                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  X-Forwarded-Proto   $scheme;
                proxy_pass        你需要代理的地址;

                # 关键配置 start
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                # 关键配置 end
        }

        location /chat/ {
                root /www/client/WebSocket-master/src;
                index client2.html;
                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  X-Forwarded-Proto   $scheme;
                proxy_pass 你需要代理的地址;

                # 关键配置 start
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                # 关键配置 end
        }

    listen 443 ssl; # managed by Certbot
    ssl_certificate 改为自己申请得到的 crt 文件路径; # managed by Certbot
    ssl_certificate_key 改为自己申请得到的 key 文件路径; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot



}
server {
    if ($host = 你的域名) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80;
        server_name 你的域名;
    return 404; # managed by Certbot


}

5.改完步骤4的内容后重启服务
重启nginx

nginx -s reload

重启node-websocket服务

pm2 restart 服务名称或id

6.完成升级后的聊天
在这里插入图片描述
在这里插入图片描述
参考:
Nginx反向代理WebSocket服务连接报错:WebSocket connection to “wss://xxx/xxx” failed
webSocket(wss)出现连接失败的问题解决方法
nginx配置https以及websocket

### Tomcat 启动时 `ClassNotFoundException` 异常的原因分析 #### 1. **异常的根本原因** 当 Java 应用程序尝试加载某个类而该类未被找到时,会抛出 `java.lang.ClassNotFoundException`。对于 `org.apache.catalina.startup.Bootstrap` 的情况,通常是因为 Tomcat 所需的核心库文件缺失或路径配置不正确。 具体来说,在 Tomcat 启动过程中,如果缺少必要的 JAR 文件或者这些文件不在 CLASSPATH 中,则会出现此类问题[^1]。 --- #### 2. **可能的触发场景** - **JDK/JRE 配置错误**: 如果使用的 JDK 或 JRE 版本与 Tomcat 不兼容,可能会导致某些核心类无法正常加载[^4]。 - **CLASSPATH 设置不当**: 当 Tomcat 的启动脚本未能正确设置 CLASSPATH 路径时,可能导致其找不到所需的 Bootstrap 类或其他依赖项。 - **Tomcat 安装损坏**: 若 Tomcat 的安装包本身存在问题(例如部分文件丢失),也可能引发此异常[^3]。 - **第三方插件冲突**: 某些情况下,其他框架(如 Dubbo 和 Zookeeper)引入的依赖可能干扰了 Tomcat 正常运行所需的基础环境[^5]。 --- ### 解决方案 以下是针对不同潜在原因的具体解决方法: #### 方法一:验证并修复 Tomcat 核心库 确认 `$TOMCAT_HOME/lib` 目录下是否存在完整的 `.jar` 文件集合。特别是以下几个关键组件: - catalina.jar - bootstrap.jar 如果没有上述文件,请重新下载官方发布的完整版 Tomcat 并替换现有目录下的内容。 #### 方法二:调整 JAVA_OPTS 参数 在启动 Tomcat 前,可以通过修改 `setenv.sh` (Linux/Mac) 或者 `setenv.bat` (Windows),确保设置了正确的 JVM 参数以及扩展路径。例如: ```bash export JAVA_OPTS="$JAVA_OPTS -Djava.library.path=$TOMCAT_HOME/bin" ``` 这一步可以有效帮助定位到 `bootstrap.jar` 及其他必要资源的位置。 #### 方法三:检查 JDK/JRE 兼容性 确保所选用的 JDK 版本支持当前版本的 Tomcat。比如,Tomcat 9 推荐搭配 JDK 8 或更高版本。同时注意清理旧有残留数据以防污染新环境。 #### 方法四:排查外部依赖影响 如果有额外的应用级依赖注入到了全局 classloader 上层结构里,那么它们有可能覆盖掉标准实现从而造成混乱。建议逐一移除不必要的 jar 包测试效果如何变化。 --- ### 示例代码片段 下面展示了一个简单的 shell 脚本来辅助完成以上操作之一——即更新 JAVA_OPTS: ```sh #!/bin/bash # Define paths and options here as needed. TOMCAT_HOME="/path/to/your/tomcat" if [ ! -d "$TOMCAT_HOME" ]; then echo "Invalid TOMCAT_HOME specified." exit 1; fi echo Setting environment variables... export CATALINA_HOME=${TOMCAT_HOME} export PATH=${CATALINA_HOME}/bin:${PATH} # Add custom java opts if required. export JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC \ -Djava.awt.headless=true \ -Dfile.encoding=UTF-8 \ -Djava.security.egd=file:/dev/urandom \ -Djava.net.preferIPv4Stack=true \ -Djava.io.tmpdir=/tmp" startCommand="${CATALINA_HOME}/bin/startup.sh" stopCommand="${CATALINA_HOME}/bin/shutdown.sh" case $1 in start) ${startCommand} ;; stop) ${stopCommand} ;; esac ``` --- ### 总结 通过对 `ClassNotFoundException` 错误现象深入剖析可知,它往往源于基础架构层面的小疏忽所致。遵循本文提出的诊断流程逐步排除隐患直至恢复正常运作状态即可成功解决问题
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值