2011-09-26 33 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

相关问题