amazon-web-services - 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,直到我更新所有客户端上的配置。
如果是这样,请建议如何做到这一点,或者您需要我方面的哪些信息可以帮助完成这项工作?
谢谢,
解决方案
在 DNS 中创建api.example.com
,指向您的 API。
在 CloudFront 中创建第二个 Origin,指向api.example.com
. 将“原始路径”留空,因为它不会按照您的假设进行。
在 CloudFront 中创建一个新的缓存行为,路径模式为/api*
. 将其指向新创建的原点。
CloudFront 会将对/api*
to的所有请求api.example.com
和其他所有请求发送到默认缓存行为源,即存储桶。