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
相关产品推荐
相关产品推荐

