You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebSocket生产环境连接404错误:P2P聊天应用部署问题排查

WebSocket生产环境连接404问题排查

问题描述

本地搭建的WebSocket P2P聊天应用运行正常,但上线生产环境后控制台报错:

WebSocket connection to 'wss://mysite.com/8080' failed: Error during WebSocket handshake: Unexpected response code: 404

本地可运行代码

服务端:

const Socket = require("websocket").server
const http = require("http")

const server = http.createServer((req, res) => {})

server.listen(8080, () => {
    console.log("Listening on port 8080")
})

const webSocket = new Socket({ httpServer: server })

客户端:

const webSocket = new WebSocket("ws://127.0.0.1:8080")

生产环境代码

服务端:

const Socket = require("websocket").server

const https = require("https")

const server = https.createServer((req, res) => {})

server.listen(8080, () => {
    console.log("Listening on port 8080")
})

const webSocket = new Socket({ httpServer: server })

客户端:

const webSocket = new WebSocket("wss://mysite.com/8080")

错误原因及解决方案

  • 客户端连接地址格式错误
    生产环境客户端地址写成了wss://mysite.com/8080,这是错误格式。带端口的WebSocket地址应该用冒号分隔域名和端口,正确写法是wss://mysite.com:8080。浏览器会把/8080当作路径请求,而你的服务端未处理该路径,直接返回404。

  • HTTPS服务缺少SSL配置
    用https.createServer()创建服务时,必须传入SSL证书和密钥参数,否则服务无法正常处理HTTPS请求,导致WebSocket握手失败。修正后的服务端代码示例:

    const fs = require('fs');
    const Socket = require("websocket").server
    const https = require("https")
    
    const options = {
      key: fs.readFileSync('/path/to/private-key.pem'),
      cert: fs.readFileSync('/path/to/certificate.pem')
    };
    
    const server = https.createServer(options, (req, res) => {})
    
    server.listen(8080, () => {
        console.log("Listening on port 8080")
    })
    
    const webSocket = new Socket({ httpServer: server })
    
  • 生产环境端口未开放
    检查服务器防火墙、云服务商安全组是否开放了8080端口,确保外部请求能访问该端口。多数云服务默认限制非标准端口访问,需手动开启。

  • 反向代理(如Nginx)未配置WebSocket支持
    如果域名通过反向代理指向服务,需在代理配置中添加WebSocket转发规则,否则代理无法正确处理握手请求。Nginx示例配置:

    location / {
        proxy_pass http://localhost:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    

    这种情况下客户端无需带端口,直接用wss://mysite.com即可连接。


内容的提问来源于stack exchange,提问作者user20197852

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:40:38