我在s3上为我的网站运行静态托管。例如。 www.somedomain.com指向S3桶。
我的api有一个子域api.somedomain.com,但处理跨域问题一直很烦人。我想映射www.somedomain.com/api / ... - > api.somedomain.com / ...但是没有完全重定向(301),因为我希望能够发布。
我知道Cloudfront允许这种行为,但由于我不需要CDN,因此它有点过分。
我已经获得了使用301重定向的路由规则,但是无论如何要配置s3将我的请求传递给ec2?谢谢!
答案 0 :(得分:3)
要解决这个问题,您需要做的就是切换范例。在您的EC2实例上,只需从您的网络应用程序中分别运行一个反向代理,如varnish或nginx,将http://www.somedomain.com/api/ *的流量路由到Web应用程序(您甚至可以重写请求网址以删除“/ api”前缀)以及到S3的所有其他流量。配置nginx或varnish来做到这一点非常简单(小时,而不是几天)。
然后将您的www.somedomain.com DNS记录切换为指向您的ec2实例而不是S3。
用于清漆的非着色VCL样品:
backend s3 {
.host = "s3.amazonaws.com";
.port = "80";
}
backend app {
.host = "localhost";
.port = "8080";
}
sub vcl_recv {
if (req.url ~ "^/api/.*") {
set req.backend = app;
set req.url = regsub(req.url, "^/api", "");
set req.http.Host = "api.somedomain.com"; /* If your web app cares about host */
}
else {
set req.backend = s3;
}
}
在此之后,如果你愿意,你可以得到一些想象,例如使用路由53来检查你的ec2实例,并在你的s3存储桶关闭时对DNS查找进行故障转移,并配置自定义缓存规则等等。但是没有有必要实现你想要的行为。