S3代理到EC2实例

时间:2013-06-10 00:54:29

标签: amazon-web-services amazon-s3 amazon-ec2

我在s3上为我的网站运行静态托管。例如。 www.somedomain.com指向S3桶。

我的api有一个子域api.somedomain.com,但处理跨域问题一直很烦人。我想映射www.somedomain.com/api / ... - > api.somedomain.com / ...但是没有完全重定向(301),因为我希望能够发布。

我知道Cloudfront允许这种行为,但由于我不需要CDN,因此它有点过分。

我已经获得了使用301重定向的路由规则,但是无论如何要配置s3将我的请求传递给ec2?谢谢!

1 个答案:

答案 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查找进行故障转移,并配置自定义缓存规则等等。但是没有有必要实现你想要的行为。