跳至主要内容

SSL与HTTP代理

如果您正在设置Owncast,并且对如反向代理、SSL或HTTPS等术语感到困惑,也许这可以帮助您。 此页面解释了它们是什么,为什么Owncast可能需要它们,以及一切是如何结合在一起的。

什么是反向代理

反向代理是一个在Owncast前面的小服务器。 它:

  • 监听公共互联网(端口80和443)
  • 处理HTTPS/SSL
  • Forwards traffic to Owncast (by default on port 8080)
  • 拥有证书
  • 加密流量
  • 在发送到Owncast之前对其进行解密 Owncast永远看不到HTTPS——它只看到普通的内部流量。

把它想象成一个前台

  • 公众与前台交流。
  • 前台将东西递给Owncast。

Owncast依靠标准的经受住考验的工具(如Caddy、Nginx、Traefik)来正确完成。 许多已经自托管或拥有自己基础设施的人,已经有了一个反向代理的设置,可以将Owncast添加到其中。

为什么您想支持SSL

  1. 如果您想将Owncast视频或聊天嵌入使用SSL的页面,则您的Owncast服务器也需要受到保护。
  2. 如果不使用SSL,浏览器将标记您的网站为"不安全"
  3. 看起来更专业,您的网站将显得更值得信赖。
  4. 在公共互联网中保护网络流量是正确的做法。

在您可能不需要它的情况下

  1. 如果您只是测试和实验Owncast。
  2. 您在内部运行服务,并且没有任何公共观众的计划。

常见误解(以及为什么会破坏东西)

  • ❌ “我在Owncast中启用了HTTPS”
  • ❌ “我将端口443转发到Owncast”
  • ❌ “我不需要反向代理”
  • ❌ "我将RTMP端口1935转发到网络代理"

这些通常导致:

  • OBS连接失败
  • 管理界面正常工作,但视频不正常
  • 嵌入不工作
  • 浏览器中的混合内容警告
  • 您仍然可以在端口8080上加载Owncast,但不能通过https端口443加载
  • 您的流在移动应用中不可用

正确的设置(简化)

  1. DNS将您的域指向您的服务器
  2. 反向代理在端口80 / 443上监听(而不是RTMP 1935)
  3. 反向代理获取SSL证书
  4. 反向代理将流量转发到Owncast
  5. Owncast runs on :8080 (the port is configurable in Server Setup)
  6. Owncast itself is kept off the public internet: bind it to loopback with --webserverip 127.0.0.1 or firewall port 8080. By default Owncast listens on every interface, so without this step visitors can bypass your proxy and reach it directly over plain HTTP.
  7. OBS sends RTMP to Owncast on port 1935, not through the proxy

The proxy must forward every path to Owncast, including the websocket upgrade at /ws that chat uses. All of the example configurations in this section do this.

如果出现问题,最有帮助的问题是:

  • “HTTPS在哪里终止?”
  • “哪个服务在端口443上监听?”
  • “OBS是在与Owncast还是与代理通信?” 回答这些几乎总能揭示问题。

流行的选项

您可以使用任何您喜欢的方法来添加SSL支持,但有一些我们看到与人们配合良好的流行选项。 如果您有任何具体问题或想提出配置或其他设置的建议,请告知我们

从反向代理继承显示名称

Owncast通常在新用户加入聊天时分配一个随机显示名称。 上游反向代理可以通过在传递网络流量时设置X-Forwarded-User HTTP头影响此行为。 此头将被用作推导用户显示名称的依据,而不是使用随机名称。 用户仍然可以将自己的显示名称更改为任何希望的值。

建议的

如果您没有使用其他选项的要求,建议您安装Caddy,因为它可以快速而轻松地安装。


Improve this page

See something missing or incorrect? Edit this page and improve the documentation for everyone.

Contributors to this documentation
Gabe KangasGabe Kangas
F
Fabio Huser
mtabrizmtabriz