你好,我正在尝试在一台机器上使用 Nginx 的反向代理管理器来设置 Discourse。通过我的 DNS 使用该框上的默认端口可以访问所有内容,但当我设置反向代理以通过我的子域强制 SSL 路由流量时,它根本不起作用。我收到 502 错误。我运行了多个容器。代理管理器是隔离的,而 Discourse 在另一个容器中。我查看了几乎所有能找到的指南,但都没有成功。2025 年肯定有办法成功做到这一点!我已经有一个使用代理管理器运行的站点,并且一切正常。我是否需要将 FPM 网络交给 Discourse 容器,因为这是代理管理器用来使 Discourse 容器可供代理管理器访问的默认网络?如果是这样,我需要去哪里设置它,因为我找不到任何信息。人们说要在他们的设置中进行设置,但不知道具体在哪里?我不想更改设置。我看到一些指南说不要暴露端口,让代理管理器处理其余的事情,我已经这样做了。我看到一些指南说尝试使用 Discourse/templates 目录中的 web.socketed templates.yml,但那也不起作用。我看到人们在暴露 Discourse 端口或不暴露端口的情况下都能成功。这里似乎没有什么是一致的。什么有效,以及现在什么有效。请记住,我只在一台机器上运行。
1 个赞
我的猜测是代理管理器工作正常,而 502 错误来自 discourse,因为它配置不正确。
您是否在 yml 文件中注释掉了 Let’s Encrypt 和 SSL 模板?
2 个赞
好消息——目前还没有发现“损坏”的地方。那个 502 几乎可以肯定是首次启动竞争:Nginx 在 Unicorn 准备好之前就尝试了你的 /srv/status。你的日志显示:
unicorn: run
- Rails 已启动

- Nginx 错误于 17:34:11 “connection refused”(可能在 Unicorn 完成之前)
我们来快速解决一下。
1) 再次尝试状态(host → app2)
curl -sSI http://127.0.0.1:8002/srv/status
- 如果仍然显示 502,只需在 app2 中重启 Nginx,然后从容器内部进行测试:
docker exec -it app2 bash -lc 'sv restart nginx & && sleep 2 && curl -sSI http://127.0.0.1/srv/status'
curl -sSI http://127.0.0.1:8002/srv/status
你应该会看到 HTTP/1.1 200 OK。
我搞定了。由于我在两个 Docker 容器中运行,我必须允许它们通过网络进行访问。由于 Discourse 是在内部 Docker 端口上运行的,因此没有暴露任何端口。而且这样更安全。
Jonnyboy!iPhone 真棒!
1 个赞
所以,那是某些人工智能告诉你的。它奏效了吗?
1 个赞
是的,它奏效了,然后我在以下主题中宣布了结果;