当 ISP 阻止端口 80 时,如何将所有 HTTP 请求重定向到 HTTPS?

当 ISP 阻止端口 80 时,如何将所有 HTTP 请求重定向到 HTTPS?

我在家里运行 HTTPS 网络服务器,但它有一个关键缺陷:您无法使用端口 80 连接到它。我的 ISP(Cox)阻止了(传入)端口 80,我对此无能为力,但幸运的是,他们没有阻止端口 443。因此,我选择使用纯 HTTPS 服务器,但这不太管用,因为我有几件事想重定向到我的(HTTPS)服务器:

http://www.example.com/ redirects to https://www.example.com/

http://example.com/ redirects to https://www.example.com/

https://example.com/ redirects to https://www.example.com/

最后,障碍:https://www.example.com/指向 (CNAME) powe.ddns.net,这是我的动态 DNS。我试过了,但我无法混合 URL 和 CNAME 记录,或者让 CNAME 仅指向 IP 上的单个端口。

到目前为止,我已将所有重定向转到https://ww2.example.com/我的家庭服务器并将其指向该点,但是我无法进行https://www.example.com/重定向,https://ww2.example.com/因为我无法执行 HTTPS 到 HTTPS 的重定向。

到目前为止,我发现的所有解决方案都依赖于端口 80 的开放,而我无法做到这一点。那么,我该怎么办?可能的解决方案包括 HTTPS 到 HTTPS 重定向、端口特定的 DNS 和从 HTTPS 的 URL 转发(我只找到了 HTTP 到 HTTP 或 HTTP 到 HTTPS 的 URL 转发)。谢谢!

答案1

好吧,事实证明这是可能的。使用 CloudFlare 的 CDN,您可以使用“始终使用 HTTPS”功能在网络级别进行自动 HTTPS 重定向,如下所示。

Cloudflare HTTPS 重写

这甚至在请求到达你的服务器之前就发生了,并且可用免费套餐。如果您想避免每次重写,您也可以打开 HSTS。

答案2

我建议调查一些低成本的托管,因为在没有第三方参与的情况下,端口 80 被阻止通常不可能发生你详细描述的情况。

这不是强制性的 - 您仍然可以托管该网站 - 但您几乎肯定会使用以下两个选项之一。

使用具有单独动态 DNS 提供商子域的 DNS 服务

关于将 HTTP 请求重定向到 HTTPS 的问题,从你帖子的详细信息来看,我假设你的 DNS 提供商示例.com有助于实现这一点。假设您希望将这些重定向到https://powe.ddns.net我将直接通过 URL 重定向进行此操作:

    www.example.com --> https://powe.ddns.net

    example.com --> https://powe.ddns.net

进一步的 HTTPS 重定向应该是不需要的。

直接通过动态 DNS 提供商使用域名

分配子域名的动态 DNS 服务很有用,但您可能希望调查具有动态 DNS 客户端并允许您使用域的 DNS 提供商(您当前的注册商或第三方)(例如https://example.com) 直接与这些服务联系。

虽然通常可以使用 80 端口,但 HTTP 到 HTTPS 重定向(例如http://example.com-->https://example.com) 在您的情况下如果没有第三方干预是不可能的,因为 URL 重定向记录和基本 DNS A 记录将产生有关给定条目的 IP 地址的问题(因此这会切断使用非 HTTPS URL 的通道)。

更新:根据 OP 自己接受的答案,显然 CloudFlare 将拦截对端口 80 的请求并将其重定向到端口 443。他们显然还有一个动态 DNS 客户端

无论是否使用 CloudFlare,仍然可以正常使用域的 HTTPS 版本。

关于重定向https://example.comhttps://www.example.com如果没有 CloudFlare,解决方案就是直接指向你的服务器 IP 和在服务器本身上对非 www 请求和 www 请求进行排序

如果你还没有这样做,只需像平常一样创建两个 A 记录,直接指向你服务器的正确 IP,例如

    example.com.   IN A   99.100.101.102

    www            IN A   99.100.101.102

并使用 HTTPS 访问它们。请咨询您的 DNS 提供商以了解这些记录的具体格式。

请注意,您可能需要让任何动态 DNS 客户端知道您希望更新这两个条目的 IP。

接下来,在 Apache 中重定向https://example.comhttps://www.example.com。同样,为了简单起见,您可以使用:

    Redirect / https://www.example.com

在 HTTPS 虚拟主机内https://example.com,尽管您可能希望使用其他重定向选项(即 301、302),尤其是出于 SEO 目的。

证书

关于证书的简要警告,请记住https://www.example.com是 的子域名https://example.com如果您希望同时使用这两种方式而不出现浏览器错误,您需要:

如果你需要非自签名的免费证书,可以选择由让我们加密。他们的网站没有直接的证书请求或管理界面,但是零SSL具有 Web 界面和命令行客户端(作为 Perl 脚本和 Windows 二进制文件)。还有其他客户端可用

Let's Encrypt 证书的唯一缺点是其有效期很短(仅 90 天)并且目前不颁发通配符证书。证书颁发有一些速率限制,但目前这些限制相当合理

浏览器内的 URL

虽然可以“屏蔽” URL,使它们在浏览器地址栏中根本不发生改变,但这通常需要单独的服务器在框架中加载内容,或者创造性地使用 mod_rewrite,但这可能会或可能不会起作用,具体取决于多种因素。

对于 HTTPS,掩码可能会破坏 HTTPS 的预期工作(主要是为了安全)。简而言之,如果您对 URL 的最小更改感到满意(例如 http:// 变成 https:// 或可能重定向https://example.comhttps://www.example.com服务器端),我会选择该路由,直接使用 example.com 与动态 DNS 提供商,如上所述。

SEO 注意事项

请注意,出于 SEO 目的(搜索引擎索引),您网站的 www 版本和非 www 版本都可能被视为具有重复内容的独立域名。因此,如果您希望您的内容被正确索引,您可能需要采取相应的措施,例如谷歌

相关内容