Gir*_*afa 5 amazon-s3 amazon-web-services aws-api-gateway api-gateway
我拥有一个域名my-portal.com。我想从 提供静态网站my-portal.com/site/a/。我想从 提供另一个静态网站my-portal.com/site/b/。
如何使用 AWS 提供的资源来做到这一点?
我试图将两个网站设置为两个独立的 S3 存储桶,并启用静态网站托管,然后创建一个包含资源的 API 网关/site/a,并将/site/b其配置为 S3 网站的 HTTP 代理。
此设置在大多数情况下都可以正常工作。但是,当浏览器尝试从我的静态网站加载二进制文件(字体、图像等)时,API 网关无法正确处理该文件并以损坏的文件进行响应(因为它对二进制文件的行为很奇怪)。
我还有哪些其他方法可以达到相同的结果?
CloudFront 允许配置多个缓存行为,将不同的路径模式路由到各自的源:
https://my-portal.com/site/a=>https://bucket-a.s3-website.amazonaws.com/site/ahttps://my-portal.com/site/b=>https://bucket-b.s3-website.amazonaws.com/site/b唯一的限制是每个 S3 存储桶都应该知道路径并在其中提供相同的文件结构。网站的存储桶A应包含该文件夹/site/a,该B存储桶应包含该文件夹/site/b。
使用 Lambda@Edge 可以克服此限制。
API Gateway 允许配置二进制文件 mime 类型。但它要求请求的标Accept头与配置的 mime 类型兼容。
因此,例如,如果您image/*在 APIG 中将 a 配置为二进制 mimetype,则您对图像的请求应该具有Accept值为image/png或image/jpg只是的标头image/*。如果标头丢失或具有其他值,APIG 不会将响应视为二进制文件。
这里的问题是浏览器通常Accept: */*在尝试加载从 CSS 导入的资源时发送。
因此,唯一的解决方案就是配置*/*为二进制 mimetype。这将破坏此 API 网关提供的所有非二进制响应,例如 JSON 响应。
这是前两种方法的组合。您只需创建一个单独的静态网站托管并将二进制文件放在那里即可。