web-dev-qa-db-ja.com

リンクを更新せずに静的ファイルをEC2からS3(またはクラウドフロント)に移動する

現在、css、js、imagesなどのすべての静的ファイルを含むEC2インスタンス上に完全にサイトがあります。それらの移動を処理するための最良の方法について疑問に思っています。たとえば、私の<HEAD>特定のhtmlページで、.jsファイルへの参照があります。

<script src="js/somefile.js"></script>

私が避けたいのは、これ(および他の多くのもの)を次のようなものに更新する必要があることです。

<script src="https://SOMETHING.cloudfront.net/js/somefile.js"></script>

私はファイルをS3に移動することについては(まだ)心配していませんが、これらのリンクを書き直す方法についてはもっと心配しています。これを回避する方法が必要だと思います。

完全を期すために、私は現在EC3インスタンスの前でロードバランサーを使用しています(これはSSLがある場所でもあります)。 DNSにもRoute53を使用しています。

どんな洞察も役に立ちます。

3
jonmrich

リンクを変更したくない場合は、静的ファイルをS3に移動する利点の多くが失われます。これは、リクエストをS3またはEC2インスタンスに正しくルーティングするために、一種のリバースプロキシを実行する必要があることを意味します。静的ファイルかどうかによって異なります。

そうは言っても、接続するためのレシピはたくさんあります。リバースプロキシとしてのnginx、たとえば https://coderwall.com/p/rlguog/nginx-as-proxy-for-Amazon-s3-public-private-files 。次に、コンテンツが静的であるかどうかに応じて、負荷分散されたEC2インスタンスのそれぞれにnginxを配置し、S3またはローカルサービスからサーバーを配置できます。

1
markusk

たとえば、Apache、nginx、さらにはIISのさまざまな書き換えモジュールは、ほとんどのCMSと同様に、その場でこれを実行できます。ただし、各要求に多くのオーバーヘッドが追加されます。

自動的かつ安全に置換を行うには、スクリプト言語に対応するHTMLパーサーが本当に必要です。この場合の正規表現は、タグとCSS参照で常にまったく同じ間隔と引数の順序を使用しない限り、完全に安全に実行するのは困難です。また、埋め込まれた<code>または<pre>または<script>タグにHTMLが含まれていないことも確認できます。さらに難しいのは、JSコードの文字列の一部であるURLです。

ファイルが実際にはHTMLではなく、PHPなどの場合は、安全のためにthat言語の完全なパーサーが必要です。または正規表現検索を使用して手動確認に置き換えます。

最後のオプションは、カスタムOriginを使用したフルプロキシCDNです。 Cloudflareが思い浮かびます。 Cloudfrontでもそれを行うことができますが、特定のカスタムSSLはcloudfrontでは非常に高価です。

0
rmalayter