【问题标题】:CloudFront static website and EC2 API on same domainCloudFront 静态网站和 EC2 API 在同一个域上
【发布时间】:2017-12-16 00:44:18
【问题描述】:

我的静态网站托管在 CloudFront 上。

有没有办法让我使用相同的域名但不同的端口来调用 EC2 实例的 API?

例如。 example.com:3000 应重定向到 EC2 实例,而 example.com(又名 example.com:443example.com:80)应重定向到 CloudFront。

【问题讨论】:

    标签: amazon-web-services amazon-ec2 dns amazon-cloudfront static-site


    【解决方案1】:

    无法根据端口号识别目标主机。仅 DNS 名称就决定了您的浏览器连接到的位置。

    但是,您仍然可以实现您想要的,只是不是通过端口号。

    您可以将 CloudFront 分配配置为根据 URL 中的路径将请求转发到您的静态网站或 API。

    为此,您需要在 CloudFront 分配中配置多个来源和多个行为:

    • /api/* -> EC2 来源
    • 其他一切 -> 静态网站来源

    对于您的浏览器,它显示为一个网站。当您请求https://www.example.com/page1.html 时,CloudFront 会将请求转发到静态网站。当您请求 https://www.example.com/api/MyRestMethod 时,CloudFront 会将请求转发到您的 EC2。

    这还允许您在 API 和静态网站之间为 HTTPS 使用相同的 ACM 证书。

    【讨论】:

    • 这会降低 API 性能,因为请求有 2 个跃点,首先是到 CloudFront 主机,然后是到 EC2 主机?所以我想为了性能起见,最好使用 API 的子域(例如api.example.com),这样它就只是直接到 EC2 主机的单跳?
    • 视情况而定。这将是 2 个跃点,但是,第一个跃点将是开放 Internet 到一个关闭的 CloudFront 边缘位置,然后是 AWS 专用网络上的第二个跃点。绝对值得进行基准测试:)
    • 到最近的边缘位置仍然需要大约 100 毫秒。考虑到使用同一个域(而不是像api.example.com 这样的子域)没有实际优势,这似乎不值得?
    • 有一些实际的优势。更少的 DNS 解析。重用已建立的 HTTPS/2 连接。从 EC2 卸载 HTTPS 加密。使用相同的 ACM 证书。无需担心 CORS。
    • 不要假设通过 CloudFront 的 2 个跃点会比直接到 EC2 的 1 个跃点慢。以您的目标客户为基准,并确定了解。与直接通过 EC2 相比,通过 CloudFront 的响应速度更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2018-04-11
    • 2017-02-09
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多