我有多个CDN服务器,它们承载一个主站点的大文件。然而,这些内容服务器没有足够的空间来容纳所有内容,因此它们只保留部分内容。我前面有Nginx作为负载均衡器,但我想直接将重定向到文件,而不是使用proxy_pass并通过负载均衡器对其进行流处理。
我现在拥有的是:
upstream cdn {
server content01.example.com;
server content02.example.com;
server content03.example.com;
}
location /files {
proxy_pass http://cdn;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_next_upstream http_404;
}当响应是http_200时,如何使它发送一个位置头,例如content01.example.com,并在出现http_404的情况下尝试下一个服务器?
我知道这可能有点奇怪,但是后端没有关于这些文件存在位置的信息,也没有足够的时间添加这些信息。
发布于 2014-12-24 23:22:18
一种方法是使用nginx模块的ngx.location.capture特性向每个上游服务器发送子请求,直到返回200。然后重写URL并发出带有该服务器地址的ngx.redirect。
我会考虑用nginx.conf之外的脚本来完成这个任务。另外,如果上游的响应具有一定的时间稳定性,我将使用memcache来缓存适当的响应,这样最终用户就必须等待经过一定数量的上游查询才能得到每一次响应。
https://stackoverflow.com/questions/27626742
复制相似问题