2011-09-26 209 views
7

我有幾個服務器addreses,如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服務器卸載工作。如果您的應用程序首先將CDN請求發送到您的Web服務器,然後重定向,那麼您並不是真正將所有內容卸載到CDN。理想情況下,您希望自己的應用程序直接呈現CDN資產的鏈接。如果您使用Rails,則可以使用內置的「資產主機」功能。其他框架有類似的功能,或者你可以DIY :) – genexp

0

這當然是可能的。 Nginx自帶負載均衡:

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

這定義了2臺服務器進行負載均衡。默認情況下,請求將在所有定義的服務器中平均分配。但是,您可以爲服務器條目添加權重。

內部服務器{}配置您現在可以添加以下來傳遞請求到負載均衡器(例如,用於加載平衡的圖像目錄中的所有請求):

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

看一看的documentation以獲得更詳細的描述。

+0

我已經試過這個解決方案,但上游的心不是我所在的服務器 –

+5

這不是正確的解決方案上。 CDN的意義在於實際從Web服務器卸載工作。這實際上會將所有請求代理到CDN而不是重定向它們,這通常會導致CDN無用。 – genexp

相關問題