CloudFront 如何在 S3 的现有分发服务网站上设置反向代理
CloudFront how to setup reverse proxy on an existing distribution serving website from S3
我有一个托管网站并随 CloudFront 一起交付的 S3 存储桶
现在我已将发行版附加到我的顶级根域,例如 - www.xyz.com
因此,之前我们使用 Nginx 从同一域的 Web 服务器根目录提供静态前端 - www.xyz.com 并且还设置了反向代理 - www.xyz.com/api /** 将流量路由到同一台机器上的上游后端服务器。
现在,我想将网站移动到 S3,但仍然 运行 后端 API 在同一台机器上,为此我将不得不更改我的 DNS 记录并将它们指向CloudFront 分布。
但是,使用 www.xyz.com/api 作为后端服务的现有和以前部署的 运行ning 服务将会中断
所以,我想将此路径模式上的所有请求转发到 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 出于兼容性目的,直到我更新所有客户端上的配置。
如果是这样,请建议如何做到这一点,或者您需要我提供哪些信息来帮助完成这项工作?
谢谢,
我不确定这是否可行,但这是我想到的第一件事。
注册附加域 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。我不熟悉所以不知道它是否可以用于这种情况。
在 DNS 中创建 api.example.com
,指向您的 API。
在 CloudFront 中创建第二个 Origin,指向 api.example.com
。将 "Origin Path" 留空,因为它不会执行您可能假设的操作。
在 CloudFront 中创建一个新的缓存行为,路径模式为 /api*
。将其指向新创建的原点。
CloudFront 会将 /api*
的所有请求发送到 api.example.com
,并将其他所有请求发送到默认的缓存行为源,即存储桶。
我有一个托管网站并随 CloudFront 一起交付的 S3 存储桶
现在我已将发行版附加到我的顶级根域,例如 - www.xyz.com
因此,之前我们使用 Nginx 从同一域的 Web 服务器根目录提供静态前端 - www.xyz.com 并且还设置了反向代理 - www.xyz.com/api /** 将流量路由到同一台机器上的上游后端服务器。
现在,我想将网站移动到 S3,但仍然 运行 后端 API 在同一台机器上,为此我将不得不更改我的 DNS 记录并将它们指向CloudFront 分布。
但是,使用 www.xyz.com/api 作为后端服务的现有和以前部署的 运行ning 服务将会中断 所以,我想将此路径模式上的所有请求转发到 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 出于兼容性目的,直到我更新所有客户端上的配置。
如果是这样,请建议如何做到这一点,或者您需要我提供哪些信息来帮助完成这项工作?
谢谢,
我不确定这是否可行,但这是我想到的第一件事。
注册附加域 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。我不熟悉所以不知道它是否可以用于这种情况。
在 DNS 中创建 api.example.com
,指向您的 API。
在 CloudFront 中创建第二个 Origin,指向 api.example.com
。将 "Origin Path" 留空,因为它不会执行您可能假设的操作。
在 CloudFront 中创建一个新的缓存行为,路径模式为 /api*
。将其指向新创建的原点。
CloudFront 会将 /api*
的所有请求发送到 api.example.com
,并将其他所有请求发送到默认的缓存行为源,即存储桶。