我目前正在使用 Amazon Route53 来管理我们的 DNS,但遇到了障碍。
我们的静态内容由 AWS S3 提供,但 S3 不支持带 CNAME 的 HTTPS。为了解决跨域问题,我们的静态内容通过 CNAME 提供。
所以,我想继续通过 S3 提供 HTTP 内容,并通过我们自己的网络服务器提供我们的 HTTPS 内容。
但是我不确定如何将 HTTP 流量路由到一个域(s3),并将 HTTPS 路由到另一个域(Web 服务器)。
答案1
DNS 仅关心将主机名解析为 IP,而不关心协议或端口号——这意味着直接回答您的问题;不:您不能使用它来路由https://example.com
到一个 IP 和http://example.com
另一个 IP。
有几种常见的方法可以解决这个问题:
- 使用反向代理监听
http://
和https://example.com
,例如nginx。该代理可以查看协议甚至请求路径,并适当地路由到其他服务器。- 除了使您的方案成为可能之外,您还可以获得其他好处:SSL 卸载以减少应用服务器上的负载,以及透明地运行多个应用服务器以实现冗余或扩展的能力。
- 缺点:如果您的所有服务器不在同一个本地网络上,那么这将非常低效(并且缓慢),因为您需要两次跨越互联网。
- 使用单独的子域名,并让你的服务器发送CORS标题。关于如何做到这一点,有大量的资源,因此我在这里就不多说了。
- 本质上,您将拥有
http://static.example.com
和https://example.com
。DNS将解析static.example.com
为S3和example.com
您的其他应用服务器。
- 本质上,您将拥有
如果您的应用服务器被慢速网络连接隔开(听起来确实如此),那么恕我直言,唯一的办法就是采用基于 DNS 的解决方案。