SRS 一键配置 HTTPS 免费证书:Oryx 接入 Let's Encrypt 的 5 分钟指南
【免费下载链接】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 是高性能实时流媒体服务器,它的上层应用 Oryx 内置了"一键 HTTPS":在控制台填入域名,就能自动申请 Let's Encrypt 免费证书并每日续期,整套流媒体服务即刻加密。本文带你从域名解析走到加密验证,全程不需要买任何商业证书。
浏览器为什么拦你的播放器
一个很真实的翻车现场:你把播放器嵌进了一个 HTTPS 网站(比如 WordPress 博客),播放地址却还是 http,页面直接白屏——浏览器出于安全策略拒绝加载非加密资源。浏览器 WebRTC 推流更严格,只有安全上下文里才允许动用摄像头和麦克风。
两个场景的解法一样:服务器必须把 HTTPS 跑起来。
Let's Encrypt 是一家免费的 CA(Certificate Authority,负责核验域名归属并签发证书的机构),它签发的 TLS 证书(TLS 是浏览器与服务器之间加密通信的协议)约 3 个月到期。Oryx 把"申请 + 续期"整条链路做成了自动化:你只管在控制台填域名,其余的事它自己干。
默认部署形态下 Oryx 面向单个域名,证书范围干净,续期逻辑也因此简单可靠。
做完之后,你会得到什么
- 加密的控制台:
https://your_domain_name/mgmt直接进 Oryx 管理面板,地址栏显示锁 🔒 - 会自己续的证书:每天定时体检,快到期自动续期并重载 NGINX,全程零人工
- 随便嵌的流:HLS、HTTP-FLV、WebRTC 流可以安全嵌入任意 HTTPS 网站
- 可用的浏览器推流:WebRTC 推流满足浏览器的安全上下文要求
动手前,先核对这两项
- 一个已装好 Oryx 的 SRS Droplet(没装的话先走官方一键安装流程;Oryx 把 SRS、FFmpeg、NGINX、Redis 和 Web 控制台打包成了单节点应用)
- 一个你管得了 DNS 的已注册域名
下文用your_domain_name代指你的域名、your_public_ipv4代指服务器公网 IP,动手时请替换成真实值。
操作主线:从指路域名到签发证书
把域名指向服务器
Let's Encrypt 签证书前要先确认你控制着这个域名,走的是 ACME(Automated Certificate Management Environment,一套自动化的证书签发协议)。最基础的一步:让域名能从公网解析到你的服务器。
到域名解析后台加一条 A 记录,把your_domain_name指向your_public_ipv4,然后验证解析是否生效:
ping your_domain_name输出长这样才算成功:
PING your_domain_name (your_public_ipv4): 56 data bytes 64 bytes from your_public_ipv4: icmp_seq=0 ttl=64 time=11.8 ms顺手在浏览器打开http://your_domain_name/mgmt,能看到 Oryx 控制台页面,说明 80 端口链路也是通的。
在控制台一键申请证书
进入System(系统)→ HTTPS → Let's Encrypt,在输入框填入your_domain_name,点Submit。
后台发生的事:Oryx 调用 LEGO(ACME 协议的客户端库)与 Let's Encrypt 服务器握手,创建 challenge(挑战)验证域名控制权,拿到证书、落盘文件、重载 NGINX——整个过程全自动,你不需要敲任何命令。
需要多个域名时,用分号分隔填写,例如
domain.com;www.domain.com;前提是每一个域名都有指向本机的 A 记录。
验证加密访问真的生效
用https://your_domain_name/mgmt刷新页面,地址栏出现锁标识、无混合内容警告,即代表证书已生效。命令行再确认一次:
curl -sI https://your_domain_name/mgmt | head -n 1输出长这样才算成功:
HTTP/2 200别让证书过期:每日自动续期机制
3 个月有效期听着紧张,实际不用你操心:Oryx 内置定时任务每天检查一次证书剩余有效期,临近到期就自动续期,必要时重载 NGINX 让新证书生效。
想确认机制是否就位,看续期日志:
docker logs platform | grep renew输出长这样才算成功:
Thread #crontab: auto renew the Let's Encrypt ssl Processing /etc/letsencrypt/renewal/your_domain_name.conf Certificate not yet due for renewal No renewals were attempted.Certificate not yet due for renewal(暂不需要续期)是健康状态;日志里出现 failed、timeout 之类的报错,才需要按下一节的排查清单动手。
源码视角:HTTPS 支撑链路长什么样
好奇它怎么实现的,链路分两层。
Oryx 层(见 Oryx 概览):
- LEGO负责向 Let's Encrypt 申请与续期证书,是自动 HTTPS 的核心
- NGINX承载 HTTP/HTTPS 入口与反向代理,证书生效后由它完成安全传输
- /data 持久化目录存放证书文件、生成的 SRS/NGINX 配置、Redis 数据,容器重启后证书不丢
- 端口映射:宿主机
443/TCP→ 容器2443/TCP(HTTPS 控制台、API、信令、加密媒体分发);80/TCP→2022/TCP(HTTP 访问)
启用 Let's Encrypt 证书后,Oryx 用它替换默认的自签名证书(/data/config/.env里的AUTO_SELF_SIGNED_CERTIFICATE开关控制自签名的生成),NGINX 与 SRS 的 HTTPS 通道统一切到真实证书。
纯 SRS 层:脱离 Oryx 单独部署时,http_server和http_api各有独立的 https 配置段,仓库自带的 https.srs.conf 就是现成参考:
http_server { enabled on; listen 8080; https { enabled on; listen 8088; key ./conf/server.key; cert ./conf/server.crt; } } http_api { enabled on; listen 1985; https { enabled on; listen 1990; key ./conf/server.key; cert ./conf/server.crt; } }参数直白:https { enabled on; }打开加密监听,listen是 HTTPS 端口,key/cert指向私钥与证书文件。https.docker.conf、https.rtc.conf、https.hls.conf 分别覆盖 Docker、WebRTC、HLS 场景;conf 目录下的 server.crt 与 server.key 是随附的自签名示例。
别把纯 SRS 的配置文件直接拷进 Oryx 环境顶替——Oryx 会在 /data 下自动生成所需配置,独立部署的 conf 只作参考。
WebRTC 场景还要留意rtc_server的candidate(即 SDP——Session Description Protocol,会话描述协议,两端靠它协商"我在哪、怎么收包"——中通告的候选地址),写成candidate $CANDIDATE;并保证客户端可达,HTTPS 信令通道和 UDP 媒体通道才能配合工作。
边界与坑:踩之前先绕开
- 坑:申请一直不过→ 对策:先 ping 验证 A 记录确实解析到
your_public_ipv4,DNS 必须是公网可解析的,内网域名走不了 ACME 验证 - 坑:证书签下来了但访问不通→ 对策:云安全组放行 80 与 443——80 给 ACME 验证和 HTTP 跳转用,443 给加密访问用
- 坑:容器重建后证书、配置全没了→ 对策:Oryx 是单节点应用,务必给
/data挂持久化目录(标准写法-v $HOME/data:/data) - 坑:想要通配符证书→ 对策:现有逻辑以单域名为主体,多域名可用分号分隔申请;wildcard 等高级需求查 Oryx 官方文档
- 坑:改了环境文件不生效→ 对策:
/data/config/.env里的参数(如CANDIDATE、MGMT_PASSWORD)修改后需要重启 Oryx
跑通之后,往哪走
至此你的 SRS Droplet 已经是一个完整加密的流媒体服务:控制台、API、播放地址全部走 HTTPS,证书每日自动续期,浏览器推流不再被拦。下一步可以试着把流嵌进自己的 WordPress 站点实测播放器,再顺手给rtc_server配上candidate把 WebRTC 链路补齐;日常只需隔三差五扫一眼续期日志,一切照常运转即可。
【免费下载链接】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),仅供参考