首页 > 解决方案 > CloudFront 如何在 S3 的现有分发服务网站上设置反向代理

问题描述

我有一个 S3 存储桶,它托管一个网站并与 CloudFront 一起交付

现在我已将分发附加到我的顶点根域,例如 - www.xyz.com

因此,之前我们使用 Nginx 从同一域上的网络服务器根目录提供静态前端 - www.xyz.com 并且还设置了反向代理 - www.xyz.com/api/**,它将流量路由到上游后端服务器在同一台机器上。

现在,我想将网站移动到 S3,但仍然在同一台机器上运行后端 API,为此我必须更改我的 DNS 记录并将它们指向 CloudFront 分配。

但是,使用 www.xyz.com/api 作为后端服务的现有和先前部署和运行的服务将中断所以,我想将此路径模式上的所有请求转发到 http:///api 以便现有应用程序不不要打破。

有没有办法我们可以做到这一点?IE -

从 CloudFront 分发的子路径转发请求,将静态前端从 S3 传递到外部应用程序服务器?

---更新--- ---Nginx conf重定向请求---

location /api/ {
                proxy_pass http://localhost:4040/api/;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
                proxy_http_version 1.1;
        }

这是在服务器指令中,该指令当前向世界公开根域和前端,但现在我想将前端迁移到 S3,因此仅出于兼容性目的保留此位置块 /api,直到我更新所有客户端上的配置。

如果是这样,请建议如何做到这一点,或者您需要我方面的哪些信息可以帮助完成这项工作?

谢谢,

标签: amazon-web-servicesnginxreverse-proxyamazon-cloudfronthttp-redirect

解决方案


在 DNS 中创建api.example.com,指向您的 API。

在 CloudFront 中创建第二个 Origin,指向api.example.com. 将“原始路径”留空,因为它不会按照您的假设进行。

在 CloudFront 中创建一个新的缓存行为,路径模式为/api*. 将其指向新创建的原点。

CloudFront 会将对/api*to的所有请求api.example.com和其他所有请求发送到默认缓存行为源,即存储桶。


推荐阅读