2011-09-26 5 views
7

私はcdn1.website.com、cdn2.website.com、cdn3.website.comのようないくつかのサーバアドレスを持っています。それぞれはsimillarファイルを保持しています。nginxを使ってCDNにリクエストをリダイレクト

リクエストは私のサーバーに来て、ランダムなcdnサーバーにリダイレクトまたはリライトします。 可能ですか?

答えて

7

あなたはsplit clientsモジュールを使用して試みることができる:

http { 

    # Split clients (approximately) equally based on 
    # client ip address 
    split_clients $remote_addr $cdn_host { 
    33% cdn1; 
    33% cdn2; 
    - cdn3; 
    } 

    server { 
    server_name example.com; 

    # Use the variable defined by the split_clients block to determine 
    # the rewritten hostname for requests beginning with /images/ 
    location /images/ { 
     rewrite^http://$cdn_host.example.com$request_uri? permanent; 
    } 
    } 
} 
+3

これは質問に対する正しい解決策ですが、私が実際に望むことを実行する最良の方法ではありません。具体的には、Webサーバーから作業をオフロードしようとしています。アプリケーションが最初にWebサーバーにCDN要求を送信してからリダイレクトされた場合、CDNにすべての負荷をかけているわけではありません。理想的には、アプリケーション自体がCDN上のアセットへのリンクを直接レンダリングすることが望まれます。 Railsを使用する場合は、組み込みの「資産ホスト」機能を使用できます。他のフレームワークにも同様の機能があります。 – genexp

0

これはもちろん可能です。 Nginxにはロードバランシングが付属しています。

upstream mysite { 
    server www1.mysite.com; 
    server www2.mysite.com; 
} 

ロードバランスのために2台のサーバーが定義されています。デフォルトでは、要求はすべての定義済みサーバーに均等に分散されます。ただし、サーバー項目に重みを追加することはできます。あなたは今(imagesディレクトリのすべての要求の負荷を分散するなど)、ロードバランサに着信要求を渡すために、以下を追加することができ、サーバー{}設定インサイド

location /images/ { 
     proxy_pass http://mysite; 
} 

documentationを見てくださいより詳細な説明については、

+0

私は、このソリューションを試してみましたが、上流イマイチ私のサーバー –

+5

これは適切なソリューションではありませんにあります。 CDNのポイントは、実際にWebサーバーから作業をオフロードすることです。これは、実際にCDNにリダイレクトするのではなく、すべての要求をプロキシしてしまうため、一般的にCDNは役に立たなくなります。 – genexp

関連する問題