news 2026/9/17 2:47:08

SRS + Oryx 一键配置 HTTPS:Let‘s Encrypt 免费证书 3 步搞定,自动续期零运维

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SRS + Oryx 一键配置 HTTPS:Let‘s Encrypt 免费证书 3 步搞定,自动续期零运维

SRS + Oryx 一键配置 HTTPS:Let's Encrypt 免费证书 3 步搞定,自动续期零运维

【免费下载链接】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,在 Oryx(原 SRS Stack)里只需要一次点击。它内置了 Let's Encrypt 免费证书的申请与续期能力,域名填进去、提交,Oryx 就会自动完成证书签发、挂载到 Nginx,并且每天检查一次到期时间,快过期时静默续期——你几乎不用碰任何命令行。

什么时候你会被 HTTPS 卡住?

两个场景最常见:

  • 浏览器推流推不上去。用 WebRTC(WHIP)从浏览器推送摄像头画面时,浏览器只在安全上下文(HTTPS 或 localhost)里放行麦克风和摄像头权限。HTTP 页面上,getUserMedia直接被拒,推流无从谈起;
  • 嵌进 HTTPS 网站后播放器转圈。WordPress 之类的站点本身是 HTTPS 的,页面里如果加载 HTTP 的 HLS/FLV 播放地址,浏览器会以 mixed content(混合内容)策略直接拦截,播放器黑屏。

换句话说,只要你的流要被浏览器用到,或者要被别的 HTTPS 网站引用,SRS 就必须走加密通道。

还有一件让事情变简单的事:Oryx 的 SRS Droplet 默认按单域名工作。一个实例对一个域名,证书怎么申请、怎么续期,都不会有多域名交叉配置的麻烦。

Oryx 本身是一个单节点一体化应用:SRS 负责底层 RTMP/WebRTC/HLS/SRT 等流媒体能力,外面包着 FFmpeg、Go 后端、React 控制台、Redis 和 NGINX。自动 HTTPS 正是 Oryx 在这一层封装出来的用户工作流之一,架构细节可以参考仓库里的 skills/srs-support/references/oryx-overview.md。

动手前的两样东西

  1. 一个装好 Oryx 的 SRS Droplet:按"一键搭建视频流服务"的流程完成安装与初始化即可,容器启动时记得把宿主机的目录挂到容器内/data(证书、Redis 数据、生成的配置都落在这里);
  2. 一个能注册、能改 DNS 的域名。本文用your_domain_name代指域名,your_public_ipv4代指服务器公网 IP,操作时替换成真实值。

另外确认云厂商安全组里宿主机80443端口对公网放行:80 端口要留给 Let's Encrypt 做验证,443 用来提供 HTTPS 访问。

第 1 步:把域名指到服务器

在域名解析后台为your_domain_name加一条A 记录,指向公网 IP:

A your_domain_name your_public_ipv4

等几分钟后验证解析是否生效:

ping your_domain_name

只要回显里的 IP 是你的your_public_ipv4,解析就通了。这一步为什么必须做?Let's Encrypt 的 HTTP/ACME challenge 会主动访问你的域名来验证控制权,域名解析不到你的机器,后面的申请必然失败。

此时用浏览器打开http://your_domain_name/mgmt,能正常看到 Oryx 控制台页面,说明 HTTP 链路也通了。

第 2 步:控制台里一键签发证书

进入控制台,走System(系统)→ HTTPS → Let's Encrypt页面,在输入框填入your_domain_name,点Submit

剩下的是 Oryx 的后台工作:它通过内置的LEGO(一个自动化的 ACME 客户端库)对接 Let's Encrypt 服务器,创建并应答 challenge 证明你控制着这个域名,然后拿回签发的证书。整个过程没有人工步骤,也没有要填的私钥、邮箱之类东西。

申请成功后,把地址换成https://your_domain_name/mgmt重新加载页面。看到地址栏出现安全锁标识,说明证书已经挂到 Nginx 上并生效了。

想同时覆盖主域和 www?输入框里用分号分隔多个域名即可,例如domain.com;www.domain.com,前提是每一个域名都配好了 A 记录。提交后https://domain.comhttps://www.domain.com会一起可用。

第 3 步:确认证书会自己续期

Let's Encrypt 签发的证书有效期大约 3 个月,手动管理就是灾难。Oryx 的做法是:起一个每天执行一次的定时任务,检查证书到期时间,该续就续,必要时重载 Nginx 让新证书立即生效。

一条命令就能确认这个机制在跑:

docker logs platform |grep renew

看到类似下面的输出,且没有报错,就说明自动续期已就绪:

Thread #crontab: auto renew the Let's Encrypt ssl Thread #crontab: renew ssl updated=false, message is Processing /etc/letsencrypt/renewal/lh.ossrs.io.conf Certificate not yet due for renewal The following certificates are not due for renewal yet: No renewals were attempted.

updated=false表示"还没到续期时间,什么都没做",这是健康状态。此后证书会一直保持有效,不需要你记任何日期。

证书背后:Oryx 和 SRS 各干了什么

一键操作看似省事,值得花两分钟搞懂分工,出问题时才知道去哪查。

Oryx 侧的三个角色:

  • LEGO:负责申请与续期证书,是自动 HTTPS 的核心引擎;
  • NGINX:证书生效后由它对外提供 HTTPS 访问与反向代理,控制台、OpenAPI、信令、媒体分发都从这条加密通道出去;
  • /data持久化目录:证书文件、Oryx 自动生成的 SRS 与 NGINX 配置、Redis 数据全在这里。容器重启、升级不丢,前提是挂载了持久卷。

端口映射上,Oryx 默认把宿主机443/TCP映射到容器内2443/TCP(HTTPS 控制台、API、信令与媒体分发),80/TCP映射到2022/TCP(HTTP 访问)。所以 Let's Encrypt 申请成功之后,https://your_domain_name/mgmt就是 Nginx 拿着这张真实证书在提供服务。

SRS 侧的 HTTPS 配置长什么样?如果你不用 Oryx、跑的是裸 SRS,HTTPS 同样是原生支持的。仓库自带的 trunk/conf/https.srs.conf 给了完整示例,http_serverhttp_api各自都能独立开启一个加密监听:

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; } }

逐条看:enabled on打开 HTTPS 监听;listen 8088/listen 1990分别是 HTTP 服务(8080)与 API 服务(1985)对应的加密端口;keycert指向私钥与证书文件。同目录下还有 trunk/conf/https.docker.conf、trunk/conf/https.rtc.conf、trunk/conf/https.hls.conf,分别覆盖 Docker、WebRTC、HLS 三种场景;trunk/conf/server.crt 与 trunk/conf/server.key 是随仓库附带的自签名示例证书,本地调试可用,生产环境请换成 Let's Encrypt 这类 CA 签发的。

WebRTC 场景多一个细节:rtc_server段要配candidate(对应环境变量$CANDIDATE),保证 SDP 里通告给浏览器的候选地址真实可达。HTTPS 管的是信令与控制面的安全,UDP 8000 端口走媒体流,两者配合缺一不可,更多说明见 skills/internal-docs-for-srs/references/cpp-docs/doc/webrtc.md。

Oryx 与 SRS 配置的关系要注意一个坑:Oryx 会在/data下自动生成所需的 SRS 与 NGINX 配置,核心参数由/data/config/.env管理(如MGMT_PASSWORD管理员密码、CANDIDATEWebRTC 候选地址、AUTO_SELF_SIGNED_CERTIFICATE自签名证书开关)。启用 Let's Encrypt 后,Oryx 用它签发的真实证书替换默认自签名证书,NGINX 与 SRS 的 HTTPS 通道统一切换过来。不要把裸 SRS 的示例 conf 直接拷进 Oryx 环境覆盖自动生成的文件,两边结构不同,容易把服务搞挂。

边界与常见翻车点

  • 以单域名为主:Oryx 的证书流程面向单域名设计(支持分号分隔的多域名),通配符(wildcard)证书这类高级玩法请对照 Oryx 官方文档确认是否支持;
  • DNS 必须公网可达:解析不到你的公网 IP,ACME challenge 过不去,申请会卡死或失败。先ping再点 Submit;
  • /data必须持久化:这是单节点部署的命门。没挂持久卷时重建容器,证书、Redis 数据、生成的配置全部归零;
  • 安全组放行 80/443:80 不是"备用端口",它承担 Let's Encrypt 的验证流量。很多人只开了 443 导致首次申请失败;
  • 容量受单机限制:Oryx 是单节点应用,并发路数、录制、转码与 HTTPS 分发共享同一台机器的资源,扩容需要自行规划多实例。

做完之后,你应该看到这些

按上面的顺序走完,逐项核对:

  1. ping your_domain_name返回的是你的公网 IP;
  2. 浏览器打开https://your_domain_name/mgmt,地址栏有安全锁,控制台正常加载;
  3. 用浏览器 WebRTC 推流(WHIP)能正常获取摄像头/麦克风权限并开始推流;
  4. docker logs platform |grep renew输出里出现 crontab 续期记录且无报错,比如Certificate not yet due for renewal这类"暂无需续期"的提示。

四条都满足,你的 SRS Droplet 就具备了长期可用的完整 HTTPS 能力:浏览器推流合规,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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 2:45:26

2026手机写代码工具大盘点:Acode、Termux与SSH远程方案全解析

刚在高铁上改完一个线上 bug,我用手机连上远程服务器,在 Termux 里敲了几行命令,把问题修了。这年头,旅行途中、通勤路上、咖啡馆里,临时要改代码早就不是新鲜事。手机上写代码怎么选工具,已经成了 2026 年…

作者头像 李华
网站建设 2026/9/17 2:43:26

使用 Fleet 为 iOS 与 iPadOS 主机下发 AirPrint 打印机配置

使用 Fleet 为 iOS 与 iPadOS 主机下发 AirPrint 打印机配置 【免费下载链接】fleet Open device management 项目地址: https://gitcode.com/GitHub_Trending/fl/fleet 本文是一份面向 IT 管理员的实战指南,讲解如何在 Fleet 中通过 Apple 配置描述文件&…

作者头像 李华
网站建设 2026/9/17 2:43:22

同花顺红绿趋势幅图指标源码逐行拆解:均线+金叉死叉逻辑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华