我真的很不想在这里做些不寻常的事情。我和其他人一样讨厌它,但这都是我所知道的,也是我所有其他自托管应用程序的运行方式。
我的通配符 A 记录指向我网络上的一个内部 IP,该 IP 由 nginx 代理管理器导出端口 80 和 443,它已经设置好了我的 SSL 证书。我现有的网络上的大部分东西都使用 Docker 设置,所以使用 nginx 代理管理器是安全的,因为它只是使用 Docker 网络通过 HTTP 进行代理。
对于 discourse,我尝试将 discourse.MYDOMAIN.com 设置为单独的 A 记录下的单独本地 IP 地址,并且它能够解析;但是,nginx 代理管理器中的 Let’s Encrypt 设置工作正常,而 discourse 的设置对于内部 IP 则不行。
所以……我只想进行反向代理。我将尝试各种 nginx 代理配置来实现这一点。我有点担心中间人攻击,但我想弄清楚为什么 nginx 代理管理器中的 Let’s Encrypt 配置适用于内部配置,而 discourse 不适用。
一定有办法的!
(附注:我知道我有点糊涂。请提出具体问题,我可以给出更清晰的说明)
1 个赞
我正在查看此处提到的 dns-01 挑战选项。
如果可能的话,我该如何用我的 discourse 配置来实现这一点?
1 个赞
pfaffman
(Jay Pfaffman)
3
关于将 Discourse 部署在 nginx proxy manager 后面的话题有很多。基本上,您可以配置 Discourse 不绑定到任何端口,并在 app.yml 的 labels: 部分添加所需的标签。
2 个赞
如果我选择 nginx 代理管理器路线,也就是我目前设置的方式(而不是在 discourse 虚拟机本身上设置 Let’s Encrypt)……
在我的情况下,因为 discourse 虚拟机是另一台机器,我仍然需要将端口 80 绑定到 discourse 虚拟机。
我目前的经验是,在使用 nginx 代理管理器进行 SSL 设置(指向 discourse 虚拟机的 IP 地址和端口 80)的当前配置中,我遇到了混合内容错误。
我认为这不可能消除,因为代码中的 http:// 引用是硬编码的……或者我说错了?您提到的这个 labels 字段会改变这一点吗?
Falco
(Falco)
6
有一个名为 force_https 的设置,您需要通过 ENV 或 rails console 启用它。
另外,别忘了在您的代理上设置正确的 x-forwarded-proto。
2 个赞
如果 Unix 套接字设置不起作用,我会尝试一下。感谢 @Falco 和 @pfaffman 的支持。我会回来告知哪些方法有效。
我无法完成 Unix 套接字设置……我的 discourse 虚拟机在另一台机器上。回到最初的计划。让我看看是否能通过论坛上的其他帖子找到启用 force_https 的方法。供参考,这个 是我无法完成的步骤。
在 nginx proxy manager 中:
proxy_set_header X-Forwarded-Proto $scheme;
DISCOURSE_FORCE_HTTPS=true 我相信(env)
或
DISCOURSE_FORCE_HTTPS: true 在 ENV 部分的 app.yml 中。
正如我之前提到的,我在 GUI 中做到了这一点。
@Falco、@pfaffman、@Jagster、@merefield……感谢你们所有人,我已成功设置了反向代理,并且不再有那些混合内容错误。
一旦我反向代理到 discourse VM 的端口 80 并能够注册等,就归结为使用 GUI 设置 force_https 并将 x-forwarded-proto 标志添加到 nginx proxy manager 的高级选项卡中。
2 个赞