springboot项目使用websocket功能,使用了nginx反向代理后连接失败问题解决

在本地服务器可以正常连接

放到生产环境后连接失败

解决方法:添加websocket代理配置

txt 复制代码
proxy_http_version 1.1; # 必须使用HTTP/1.1
proxy_set_header Upgrade $http_upgrade; # 传递Upgrade头
proxy_set_header Connection "upgrade"; # 将Connection头设置为"upgrade"

nginx.conf完整配置

txt 复制代码
#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  www.mytest.com;

        # 将所有的HTTP请求重定向到HTTPS
        return 301 https://$server_name$request_uri;
    }

    # HTTPS server
    server {
        listen       443 ssl;
        server_name  www.mytest.com;

        ssl_certificate      D:/nginx-1.26.3/ssl/www.mytest.com.crt;
        ssl_certificate_key  D:/nginx-1.26.3/ssl/www.mytest.com.key;

        ssl_session_cache    shared:SSL:10m;
        ssl_session_timeout  10m;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /api/ {
            # 指定要代理到的目标服务器地址
            proxy_pass http://192.168.1.22:8080/;

            # 以下是WebSocket代理的核心配置
            proxy_http_version 1.1; # 必须使用HTTP/1.1
            proxy_set_header Upgrade $http_upgrade; # 传递Upgrade头
            proxy_set_header Connection "upgrade"; # 将Connection头设置为"upgrade"
            
            # 标准代理头(同样重要)
            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; # 告诉后端这是HTTPS请求

            # 建议增加超时时间,因为WebSocket是长连接
            proxy_read_timeout 3600s; # 1小时
            proxy_send_timeout 3600s;
            proxy_connect_timeout 30s;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

如果是http写使用wx://www.xxx.com,https协议使用wss://www.xxx.com

相关推荐
Flynt17 分钟前
把公司项目迁到 Spring Boot 4.0:编译通过只是开始
java·spring boot·后端
yxlalm3 小时前
5.3解决超卖问题
java·spring boot·超卖
企业通信技术笔记4 小时前
企业IM内外网隔离部署:DNS、证书、WebSocket与跨网接口设计
websocket·网络协议·架构·php·信息与通信
边境悍匪4 小时前
蜗牛学苑 Java 智能体学习 Day39|SpringAI 会话存储、Function‑Call 工具调用、MCP 思维导图复盘
java·开发语言·spring boot·学习·阿里云
IT菜鸟程5 小时前
Ubuntu 下 apt 版 Nginx 升级为源码编译版本完整操作指南(1.24.0 → 1.30.4 实战)
linux·nginx·ubuntu
xcl09256 小时前
全民健身智慧管理系统实战指南:从架构设计到部署落地
java·spring boot
Bs_MoneyMagnet6 小时前
基于springboot+vue的宠物殡葬管理平台的设计与实现 源码+文档
java·javascript·vue.js·spring boot·后端·宠物
ly76896 小时前
生产环境 Spring Boot 应用内存泄漏排查实战
java·spring boot·spring·内存泄漏·threadlocal·gc日志·堆转储
sbjdhjd7 小时前
从 7 字符文件名拼接到二维数组取值:PHP 无参函数限制下的受控靶场复盘 | (7字符绕过)
网络·nginx·安全·网络安全·云计算·php·apache
行百里er8 小时前
Spring Insight 里上报 Span 为什么用 JDK HttpClient 而不是 RestTemplate
spring boot·spring cloud·监控