0

私のファイルがホストされAmazon s3、サイトがオンになっているdjangoアプリがありますEc2

S3 からダウンロードされるデータが多すぎるため、BW コストが高くなりました。

現在、デジタルオーシャンでは、BW2TBが利用可能なサーバーを 10 ドルで入手できます。

サーバーを移動したくないので、有効かどうかわからないセットアップを考えています。

ユーザーがファイルのダウンロードをクリックすると、その要求が同じサーバーに送信some serviceDigital oceanれるか、同じサーバーに送信され、DG サーバーでファイルが利用可能かどうかが最初に確認されるようになります。ファイルが存在する場合、DG はダウンロード用にファイルを提供する必要があります。ファイルが存在しない場合はAWS S3、次の要求が DG Ocean サーバーから送信されるように、ファイルが提供されてから DG サーバーにコピーされます。そのため、最も頻繁に使用されるファイルをそこに保持するために、20GB 以上のスペースを使用する予定です。

そのようなセットアップは可能ですか、それとも私が望むことを達成するためのより良い方法があります

私のウェブサイトはDjango Python

4

1 に答える 1

0

特定のニーズに少し依存しますが、ここでの最も簡単な解決策は、キャッシング付きのリバース プロキシを使用することだと思います。

これはもちろん、Amazon にメインDGファイルがあり、サーバーを非永続ストレージと見なしている場合にのみ適用されます。

Nginx はここでは非常にシンプルで、おそらく十分に強力です。だから私はあなたの状況で試してみます:

(誰かがファイルにアクセスしていると仮定http://satic.your-site.com/image/example.jpg

  • DGサーバー上のNginxによって処理される「静的」リクエスト
  • Nginxは、コンテンツがキャッシュにあるかどうかを確認します
  • はいの場合、応答は nginx キャッシュから直接配信されます
  • いいえの場合、Nginx は上流のサーバーから応答を読み込みます

これには多くの利点があり、非常に柔軟です。たとえば、多くの変更を行い、キャッシュを無効にしたい場合は、対応するディレクトリを空にするだけです (おそらくサーバーを HUP します)。

簡単なnginx構成の例:

proxy_cache_path  /var/lib/nginx/cache  levels=1:2   keys_zone=yoursite_cache:256m  max_size=5G;

upstream yoursite_upstream {
    server your-instance.s3.amazon.com:80 weight=1 fail_timeout=120s;
    # works as well with multiple backends. just for reference, as not needed with s3
    # server your-instance-2.s3.amazon.com:80 weight=1 fail_timeout=120s;
}


server {
    listen   *:80;
    server_name satic.your-site.com;
    access_log  /var/log/nginx/satic.your-site.com.access.log;
    error_log  /var/log/nginx/satic.your-site.com.error.log info;

    add_header X-Cache-Status;

    location / {
        proxy_ignore_headers "Set-Cookie";
        proxy_read_timeout 600;
        proxy_cache_valid  200 302  1440m;
        proxy_cache_valid  404  1m;
        proxy_cache yoursite_cache;

        proxy_pass http://yoursite_upstream;
    }
}
于 2014-03-15T09:52:46.880 に答える