Amazon web services CloudFront静态网站和EC2 API位于同一域上

Amazon web services CloudFront静态网站和EC2 API位于同一域上,amazon-web-services,amazon-ec2,dns,amazon-cloudfront,static-site,Amazon Web Services,Amazon Ec2,Dns,Amazon Cloudfront,Static Site,我的静态网站托管在CloudFront上 我有没有办法使用相同的域名但不同的端口来调用EC2实例的API 例如,example.com:3000应该重定向到EC2实例,而example.com(又名example.com:443或example.com:80)应该重定向到CloudFront。无法根据端口号识别目标主机。DNS名称单独决定浏览器连接到的位置 然而,您仍然可以实现您想要的,只是不需要端口号 您可以配置CloudFront发行版,根据URL中的路径将请求转发到静态网站或API 要实现

我的静态网站托管在CloudFront上

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


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

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

然而,您仍然可以实现您想要的,只是不需要端口号

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

要实现这一点,您需要在CloudFront发行版中配置多个来源和多个行为:

  • /api/*
    ->EC2原点
  • 其他一切->静态网站来源
对于浏览器,它显示为单个网站。当您请求
https://www.example.com/page1.html
,CloudFront将请求转发到静态webiste。当您请求
https://www.example.com/api/MyRestMethod
,CloudFront将把请求转发给您的EC2


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

这会降低API性能,因为请求有两个跃点,首先到CloudFront主机,然后到EC2主机?因此,我想出于性能考虑,最好为API使用子域(例如,
API.example.com
),这样就只需直接跳到EC2主机了?这取决于具体情况。这将是2个跃点,然而,第一个跃点将是开放的互联网到一个封闭的CloudFront edge位置,然后是AWS专用网络上的第二个跃点。绝对值得进行基准测试:)距离最近的边缘位置仍然需要大约100毫秒。考虑到使用同一个域(而不是像
api.example.com
)这样的子域)没有实际优势,这似乎不值得吗?有一些实际优势。更少的DNS解析。重用已建立的HTTPS/2连接。从EC2卸载HTTPS加密。使用相同的ACM证书。不需要担心CORS。不要假设通过CloudFront的2个跃点比直接到EC2的1个跃点慢。从你的目标客户那里对其进行基准测试并确定。我看到,与直接使用EC2相比,CloudFront的响应速度更快。