在端口 80 生成 https 链接

我需要实现服务器监听 80 端口,但返回的链接为 HTTPS。如何解决这个问题?

我目前的配置如下,所有链接都是 HTTP:
expose:
# - “443:443” # https
- “80:80” # https

我尝试将其重命名为 443,但失败了。

我觉得这恐怕做不到。

1 个赞

Let’s Encrypt 非常严格,出于安全考虑,我认为他们不会为 443 端口以外的任何端口提供 SSL 证书。

2 个赞

也许可以开启 强制 HTTPS 站点设置?

1 个赞

您能解释一下为什么需要做这件事吗?

1 个赞

有一台内部服务器运行着 Discourse,并在 80 端口开放监听。当访客访问该站点时,页面会自动跳转至 HTTPS,但所有链接仍使用 HTTP。我无法控制此基础设施,除了 80 端口外,没有其他可用途径。

恐怕在我的情况下这行不通,因为我实际上并不使用 https。

我可以将其关闭,但在我看来,这并不能解决问题,因为由于 SSL 的限制,无法在端口 80 上启用 HTTPS。

Discourse 不支持在非标准端口上运行。

这包括在端口 80 上运行 HTTPS。

1 个赞

您的意思是,您在其他地方部署了反向代理,负责为所有站点(包括 Discourse)处理 SSL 吗?

1 个赞

你试过吗?

那你现在想做什么?

这是否意味着你希望页面中提供的链接使用 https,而 https 的处理是由其他方式完成的?

抱歉,我还没有完全理解您的帖子。

您说过:

我需要配置服务器,使其监听端口 80,但提供 https 链接。我该如何解决这个问题?

如果我的理解正确,您希望将所有端口 80 的 HTTP 流量重定向到端口 443 的 HTTPS,并且不希望端口 80 直接处理 HTTPS 流量,而只是将端口 80 重定向到端口 443。

如果是这样,大多数 Web 服务器都是这样配置的;例如,如果您使用 LetsEncrypt 在 Apache2 或 nginx 上配置端口 443 的流量,LetsEncrypt 会询问您是否要设置此重定向,并自动为您完成。

正如 @Falco 所问,您的确切配置是什么?您是否在 Discourse 前面运行了像 nginx 或 Apache2 这样的 Web 服务器作为反向代理?

如果是这样,当您在 nginx 或 Apache2 上设置 LetsEncrypt 时,LetsEncrypt 的设置软件会自动为您配置“将所有 HTTP 重定向到 HTTPS”(如果在配置对话框询问时选择“是”)。

2 个赞

是的,他们正确理解了我的意思


我无法再打开其他端口,而且虽然有一个反向代理使网站启用了 HTTPS,但 Discourse 内部的链接并未更新为 HTTPS。

嗯,我的 Discourse 输出流始终是 80 端口。我无法监听其他端口,而且也没有关于 Let’s Encrypt 的相关配置。

你好 @anton21m

是的,现在我们更清楚地了解到,你的容器前面有一个反向代理。

你使用的是哪种反向代理?是 nginx 还是 Apache2?

服务器:nginx/1.14.1
但我无法访问它
https://forum.qpay.uz/

你可以看到所有链接都是 http

@anton21m,这是一个外观简洁的新 Discourse 站点。

我们现在完全理解您的情况。谢谢。

如果您无法访问 nginxsystem,则需要联系您的系统管理员安装 LetsEncrypt 并为您的站点添加 SSL。

如果您打算继续使用该托管服务商且无法访问 nginx,这确实是您唯一的选择。

很抱歉告知您这一点。或许可以考虑更换其他托管服务商?

1 个赞

显然,这是不可能的!!!
我想找到这样一个解决方案

您所提到的那个“理想解决方案”,正是我们之前建议您的做法;例如,将您的 Web 服务器配置为将 80 端口的流量重定向到 443 端口。

该方案需要您修改 Web 服务器,这与您之前收到的建议一致。

因此,@anton21m,我们似乎开始原地打转了……

但为了您能成功,让我再为您重复一次 :slight_smile: :):

您需要能够访问 Web 服务器,并将其配置为将 80 端口的流量重定向到 443 端口,同时需要在同一 Web 服务器上设置 SSL 证书。如果您的托管服务商不允许这样做,那么您需要更换托管服务商。

您可以考虑使用 Discourse 推荐的托管服务商之一,因为他们可以轻松为您完成所有这些配置。

希望这对您有帮助。

推荐:

1 个赞

您应该可以通过启用 Discourse 的 force_https 站点设置来实现这一点。

3 个赞