この問題を解決するには、パラダイムを切り替えるだけです。EC2 インスタンスで、 http://www.somedomain.com/api/ * のトラフィックを Web アプリにルーティングする Web アプリとは別に、varnish や nginx などのリバース プロキシを実行するだけです (リクエスト URL を書き換えて削除することもできます)。 "/api" プレフィックス) および S3 への他のすべてのトラフィック。これを行うために nginx または varnish を構成するのは非常に簡単です (数日ではなく数時間)。
次に、www.somedomain.com DNS レコードを切り替えて、S3 ではなく ec2 インスタンスを指すようにします。
これを行うワニスの非リント 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 ルックアップをフェイルオーバーし、カスタム キャッシング ルールを構成するなど、好きなだけ手を加えることができます。あなたが望む行動を達成します。