如何为 SRS 一键配置 HTTPS:Oryx 自动签发 Let's Encrypt 证书完整指南
【免费下载链接】srsSRS is a simple, high-performance, AI-driven real-time media server supporting RTMP, WebRTC, HLS, HTTP-FLV, HTTP-TS, SRT, MPEG-DASH, and GB28181, with codec support for H.264, H.265, AV1, VP9, AAC, Opus, and G.711.项目地址: https://gitcode.com/GitHub_Trending/sr/srs
本文带你完整走通 SRS HTTPS 的"一键 HTTPS"链路:通过 Oryx 为 SRS Droplet 自动签发 Let's Encrypt 证书,开启流媒体加密访问,并确认证书每日自动续期。读完后,你能独立完成从域名解析、控制台提交证书申请到续期检查的全流程,并弄清 Oryx 与 SRS 底层对 SRS 流媒体加密的支撑方式。
为什么 SRS 绕不开 HTTPS
浏览器里用 WebRTC 推流,依赖安全上下文:摄像头和麦克风只在 HTTPS(或 localhost)页面中可访问。不配置 HTTPS,浏览器推流页面根本打不开,这是硬性限制,不是建议项。
另一个高频场景是把播放嵌入 HTTPS 网站。页面是 HTTPS、流地址是 HTTP 时,浏览器会按 mixed content(混合内容)策略拦截,画面直接黑屏。唯一解法就是让 HLS/FLV/WebRTC 流也走 HTTPS。
换句话说,HTTPS 不是 SRS 的加分项,而是浏览器侧使用的前置条件。
环境准备清单
开始之前,请确认三项前置条件:
- 已安装 Oryx 的 SRS Droplet:完成 Oryx 的安装与初始化;
- 一个完整注册的域名:任意域名注册商均可购买,本文用
your_domain_name占位; - 服务器公网 IP:本文用
your_public_ipv4占位,实际请替换为真实值。
Oryx(原名 SRS Stack)是一个单节点一体化应用,集成了 SRS、FFmpeg、Go 后端、React 控制台、Redis 与 NGINX。SRS 提供底层流媒体能力,Oryx 在其上封装了自动 HTTPS、鉴权、录制、转推等面向用户的工作流。自动 HTTPS 由内置的 LEGO 组件(Let's Encrypt 客户端库)驱动,证书申请与续期全自动。详见 oryx-overview.md。
HTTPS 配置全链路
域名解析到服务器
Let's Encrypt 需要通过网络验证你对域名的控制权,域名必须先解析到服务器公网 IP。在域名服务商后台为your_domain_name添加一条 A 记录:
A your_domain_name your_public_ipv4等待 DNS 生效后,用ping验证:
ping your_domain_name输出中解析到你的服务器公网 IP,说明记录生效。接着在浏览器访问http://your_domain_name/mgmt,能正常加载 Oryx 控制台页面,整条链路的前置条件就齐了。
控制台提交证书申请
打开 Oryx 控制台,进入System(系统)> HTTPS > Let's Encrypt页面,输入你的域名,点击Submit。
⚠️ 提交之后的所有操作都由 Oryx 自动完成:内置的 LEGO 组件与 Let's Encrypt 服务器通信,创建 challenge(挑战)验证域名控制权,完成证书签发,并写入持久化存储。全程无需手动干预。
支持一次申请多个域名,用分号分隔即可。例如输入domain.com;www.domain.com,那么https://domain.com与https://www.domain.com会同时可用——前提是每个域名都添加了 A 记录并指向本机。
验证生效与确认续期
重新用https://your_domain_name/mgmt加载站点,观察浏览器地址栏:出现 HTTPS 锁标识,说明证书已生效。
Let's Encrypt 签发的证书有效期约为 3 个月。Oryx 内置定时任务每天检查证书是否即将到期,需要时自动续期并重新加载 NGINX 使新证书生效。执行下面的命令即可查看续期日志:
docker logs platform |grep renew日志中出现renew ssl updated=false或Certificate not yet due for renewal之类的字样且没有报错,说明自动续期机制已就绪,证书会一直有效,无需人工盯守。
底层支撑机制剖析
Oryx 侧的 HTTPS 架构
Oryx 的 HTTPS 能力由三个环节共同构成:
- LEGO:证书申请与续期的核心,负责与 Let's Encrypt 的全部交互;
- NGINX:提供 HTTP/HTTPS 访问与反向代理,承载网页与媒体资源的安全分发;
/data持久化目录:SSL 证书文件、生成的 SRS 与 NGINX 配置、Redis 数据统一存放在此,容器重启后证书不丢失。
端口映射决定访问路径:宿主机443/TCP映射到容器内2443/TCP,承载 HTTPS 控制台、OpenAPI、信令与安全的 HTTP 媒体分发;80/TCP映射到2022/TCP,用于普通 HTTP 访问。
SRS 原生 HTTPS 配置
脱离 Oryx,SRS 本身也具备完整的 HTTPS 配置能力。http_server与http_api下都可以挂独立的https配置块,共四个参数:
enabled on:开启 HTTPS 监听;listen:HTTPS 服务监听端口;key:私钥文件路径;cert:证书文件路径。
https.srs.conf 中http_server段给出如下示例:
http_server { enabled on; listen 8080; https { enabled on; listen 8088; key ./conf/server.key; cert ./conf/server.crt; } }http_api段结构完全相同,HTTPS 端口为 1990。Docker、WebRTC、HLS 场景分别可在 https.docker.conf、https.rtc.conf 与 https.hls.conf 中找到完整的配置参考;仓库随附的server.crt与server.key是自签名证书示例。WebRTC 场景下,rtc_server还需要配置candidate(即$CANDIDATE),确保 SDP 中通告的候选地址可被客户端访问,与 HTTPS 的 UDP 媒体通道配合工作。
Oryx 与 SRS 配置的关系
Oryx 模式下,不要把 SRS 独立部署的配置文件直接替换进去。Oryx 会在/data下自动生成所需的 SRS 与 NGINX 配置,并通过/data/config/.env环境文件管理核心参数:MGMT_PASSWORD(管理员密码)、CANDIDATE(WebRTC 候选地址)、AUTO_SELF_SIGNED_CERTIFICATE(自签名证书开关)等。启用 Let's Encrypt 证书后,Oryx 用 LEGO 签发的证书替换默认自签名证书,让 NGINX 与 SRS 的 HTTPS 通道统一使用真实证书。
边界与注意事项
- 单域名为主:证书申请逻辑以单个域名为主要场景(支持分号分隔多域名),通配符域名等高级需求请参考 Oryx 官方文档;
- DNS 必须公网可解析:HTTP/ACME challenge 要求域名解析到你的公网 IP,A 记录配置错误是申请失败的最常见原因;
- 保持
/data持久化挂载:Oryx 是单节点部署,证书与配置都在/data下,容器替换后没有持久挂载意味着全部丢失; - 端口放行:宿主机的 80、443 端口须对公网开放并在云安全组放行——80 用于 Let's Encrypt 验证与 HTTP 跳转,443 用于 HTTPS 访问。
总结
- 为域名添加了 A 记录,解析到服务器公网 IP;
- 在 Oryx 控制台一键获取 Let's Encrypt 证书,LEGO 自动完成域名验证与签发;
- 通过地址栏锁标识验证 HTTPS 生效,并用日志确认每日自动续期机制就绪;
- 理清了 LEGO、NGINX、
/data持久化三者的分工,以及 SRS 原生https配置块的用法。
至此,SRS Droplet 具备了完整的 HTTPS 能力:WebRTC 浏览器推流满足安全上下文要求,HLS/FLV/WebRTC 流也能安全嵌入任何 HTTPS 网站播放。
【免费下载链接】srsSRS is a simple, high-performance, AI-driven real-time media server supporting RTMP, WebRTC, HLS, HTTP-FLV, HTTP-TS, SRT, MPEG-DASH, and GB28181, with codec support for H.264, H.265, AV1, VP9, AAC, Opus, and G.711.项目地址: https://gitcode.com/GitHub_Trending/sr/srs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考