我们有一个 Discourse 实例已运行至少三年,昨天我犯了一个错误,重启了该实例,希望能完成域名变更。实例目前处于运行状态,我们也能看到 nginx 正在接收来自外部的请求,但所有访问者一直收到“502 Bad Gateway”错误。以下是 nginx 错误日志中的一条示例记录:
2020/06/22 19:03:26 [error] 11742#11742: *158 connect() failed (111: Connection refused) while connecting to upstream, client: 162.158.159.12, server: <my domain>, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:3000/", host: "<my domain>"
Docker 外部没有运行任何 Web 服务器,因此 app.yml 文件只是将 80 和 443 端口转发到容器内。但 3000 端口上应该运行什么服务?它应该是 Ruby / Rails 吗?
neounix
(Dark Matter)
2
你好 Chris:
是的,你说得对。
在 Discourse 应用中,Rails 运行在 3000 端口。
你可以检查一下应用中的 Rails 日志,看看能否找出 Rails 出现问题的原因。
希望这能帮到你。
您是否正在尝试更改实例的域名?
为此已制定了相关流程。如果您未按照流程操作,可能会导致您所遇到的此类错误。
请按照本指南操作,它将帮助您正确更改域名。
Change the domain name or rename your Discourse
存在一个“开发”环境替代方案,用于替代正式域名。不知何故,该方案已混入配置中,导致除图片外的所有内容均来自正式域名,而图片却来自开发域名。由于开发域名没有安装证书,我们(完全正确地)遇到了跨站安全限制,导致图片无法加载。
目前,我们正按照其他地方的建议,尝试重新构建容器。
另一个复杂情况是,所有流量都经过 CloudFlare,因此我们现在遇到了 SSL 证书的问题。不确定 templates/cloudflare.template.yml 是否仍然有效?
pfaffman
(Jay Pfaffman)
6
您需要禁用 Cloudflare,才能让 Let’s Encrypt 成功申请证书。
现在一切正常。我们最优秀的技术团队成功构建了一个新版本,甚至让 Let’s Encrypt 也正常工作了!