服务器 > 网络 > websocket

Nginx将WebSocket ws视频流转换为wss视频流的配置方案

1人参与 2026-09-20 websocket

将 websocket (ws) 转换为安全 websocket (wss),核心在于在通信链路中加入 ssl/tls 加密层

通常有两种实现方案:

  1. 反向代理方案(推荐):使用 nginx 或 caddy 作为边缘代理,处理 ssl 卸载。
  2. 应用层方案:直接在 node.js/python/go 后端代码中配置 ssl 证书。

以下是工业界最常用的 nginx 反向代理方案

方案一:使用 nginx 作为 wss 代理

这种方式无需修改后端视频流业务代码,性能最高,且方便管理证书。

1. 准备工作

2. nginx 配置 (/etc/nginx/conf.d/video.conf)

在 nginx 中,你需要配置一个监听 443 端口的 server 块,并将 wss 请求转发给后端的 ws 服务。

server {
    listen 443 ssl;
    server_name video.example.com;
    # 配置 ssl 证书
    ssl_certificate     /etc/nginx/ssl/video.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/video.example.com.key;
    # ssl 优化配置(可选)
    ssl_protocols tlsv1.2 tlsv1.3;
    ssl_ciphers high:!anull:!md5;
    location / {
        # 转发到后端 ws 服务
        proxy_pass http://127.0.0.1:8080;
        # websocket 关键头配置
        proxy_http_version 1.1;
        proxy_set_header upgrade $http_upgrade;
        proxy_set_header connection "upgrade";
        # 传递客户端真实 ip
        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_read_timeout 86400s;
        proxy_send_timeout 86400s;
    }
}

3. 为什么这样配置有效?

方案二:如果你使用 node.js 直接部署 (https 模块)

如果你的后端是 node.js (例如 ws 库),你也可以直接在代码中加载证书:

const fs = require('fs');
const https = require('https');
const websocket = require('ws');
// 加载证书
const server = https.createserver({
  cert: fs.readfilesync('/path/to/cert.crt'),
  key: fs.readfilesync('/path/to/key.key')
});
const wss = new websocket.server({ server });
wss.on('connection', (ws) => {
  console.log('客户端已连接');
  // 这里处理视频流逻辑
});
server.listen(8443); // 此时访问 wss://your-ip:8443

常见避坑指南

  1. 混合内容错误 (mixed content)
    • 如果你的前端网页是通过 https 加载的,你绝对不能在代码中使用 ws://,否则浏览器会因安全策略拦截。必须使用 wss://
  2. 证书链问题
    • 使用 nginx 时,ssl_certificate 必须包含完整的证书链(包含中间证书),否则移动端或部分浏览器会报 self-signed certificate 错误。
  3. 连接超时
    • 如果是长时视频流,确保 nginx 的 proxy_read_timeout 设置足够大,否则 nginx 会自动断开 60 秒后没有数据包的连接。
  4. 防火墙
    • 确保服务器的防火墙(ufw 或 firewalld)开放了 443 端口。

建议:生产环境强烈推荐使用 方案一 (nginx),因为 nginx 处理高并发连接的能力远高于 node.js 或 python 自带的 http 服务,且更易于维护 ssl 证书的更新。

到此这篇关于nginx将websocket ws视频流转换为wss视频流的配置方案的文章就介绍到这了,更多相关nginx websocket ws视频流转为wss内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

在Ubuntu系统中修改DNS的多种操作方法

02-07

nginx配置长连接、短连接、WebSocket的实现步骤

02-07

深入理解NumPy 的 np.column_stack的实现

01-07

Nginx使用Prometheus+Grafana实现日志分析与监控

12-27

Nginx WebSocket长连接及数据容量配置实践

12-27

Websocket的用法及常见应用场景

12-16

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论