我有几个服务器addreses,如cdn1.website.com,cdn2.website.com,cdn3.website.com。他们每个人都拥有simillar文件。使用nginx将请求重定向到CDN
请求来到我的服务器,我想重定向或重写它到一个随机的cdn服务器。 这可能吗?
我有几个服务器addreses,如cdn1.website.com,cdn2.website.com,cdn3.website.com。他们每个人都拥有simillar文件。使用nginx将请求重定向到CDN
请求来到我的服务器,我想重定向或重写它到一个随机的cdn服务器。 这可能吗?
你可以尝试使用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;
}
}
}
这当然是可能的。 Nginx自带负载均衡:
upstream mysite {
server www1.mysite.com;
server www2.mysite.com;
}
这定义了2台服务器进行负载均衡。默认情况下,请求将在所有定义的服务器中平均分配。但是,您可以为服务器条目添加权重。
内部服务器{}配置您现在可以添加以下来传递请求到负载均衡器(例如,用于加载平衡的图像目录中的所有请求):
location /images/ {
proxy_pass http://mysite;
}
看一看的documentation以获得更详细的描述。
我已经试过这个解决方案,但上游的心不是我所在的服务器 –
这不是正确的解决方案上。 CDN的意义在于实际从Web服务器卸载工作。这实际上会将所有请求代理到CDN而不是重定向它们,这通常会导致CDN无用。 – genexp
这是问题的正确解决方案,但这不是实现我期望的实际想要的最佳方式。具体而言,您正试图从您的Web服务器卸载工作。如果您的应用程序首先将CDN请求发送到您的Web服务器,然后重定向,那么您并不是真正将所有内容卸载到CDN。理想情况下,您希望自己的应用程序直接呈现CDN资产的链接。如果您使用Rails,则可以使用内置的“资产主机”功能。其他框架有类似的功能,或者你可以DIY :) – genexp