6

Web サイトの s3 で静的ホスティングを実行しています。例えば。www.somedomain.com は S3 バケットを指しています。

API 用のサブドメイン api.somedomain.com を持っていますが、クロスドメインの問題に対処するのが面倒です。www.somedomain.com/api/... -> api.somedomain.com/... をマップしたいのですが、投稿できるようにしたいので、完全なリダイレクト (301) は行いません。

Cloudfront でこの動作が許可されていることは理解していますが、CDN は必要ないため、少しやり過ぎです。

ルーティング ルールが 301 リダイレクトで機能するようになりましたが、リクエストを ec2 に渡すように s3 を設定する方法はありますか? ありがとう!

4

1 に答える 1

3

この問題を解決するには、パラダイムを切り替えるだけです。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 ルックアップをフェイルオーバーし、カスタム キャッシング ルールを構成するなど、好きなだけ手を加えることができます。あなたが望む行動を達成します。

于 2013-07-20T21:30:56.373 に答える