我有一个S3存储桶,该存储桶托管一个网站并随CloudFront一起交付
现在,我已将发行版附加到我的根目录根域,例如-www.xyz.com
因此,以前我们使用Nginx从同一域(www.xyz.com)上的Web服务器根提供静态前端,并且还设置了反向代理(www.xyz.com/api/**)来路由流量到同一台计算机上的上游后端服务器。
现在,我想将网站移至S3,但仍要在同一台计算机上运行后端API,为此,我必须更改DNS记录并将其指向CloudFront发行版。
但是,使用www.xyz.com/api作为后端服务的现有和以前部署并正在运行的服务将会中断 因此,我想将此路径模式上的所有请求转发到http:/// api,以使现有应用程序不会中断。
有没有办法可以做到这一点?即-
来自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,直到我在所有客户端上更新配置为止。
如果是这样,请建议如何完成此工作,或者从我这方面您需要什么信息来帮助完成此工作?
谢谢
答案 0 :(得分:1)
在DNS中创建api.example.com
,指向您的API。
在CloudFront中创建第二个Origin,指向api.example.com
。将“原始路径”留为空白,因为它没有达到您的预期。
使用/api*
的路径模式在CloudFront中创建新的缓存行为。将其指向新创建的原点。
CloudFront会将对/api*
的所有请求发送到api.example.com
,并将其他所有请求发送到默认的“缓存行为起源”,即存储桶。
答案 1 :(得分:0)
我不确定这是否行得通,但这是我想到的第一件事。
注册其他域api.xyz.com,并将其指向您的旧计算机。
使用以下nginx server
配置块:
server {
server_name api.xyz.com;
...
location / {
proxy_pass http://localhost:4040;
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;
}
}
使用以下Amazon S3 redirection rules将所有请求从www.xyz.com/api/...
重定向到api.xyz.com/...
:
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals>api/</KeyPrefixEquals>
</Condition>
<Redirect>
<HostName>api.xyz.com</HostName>
<ReplaceKeyPrefixWith></ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
</RoutingRules>
您也可以查看AWS Lambda Edge。我不熟悉它,因此无法确定它是否可以用于这种情况。