【发布时间】:2012-11-03 01:04:07
【问题描述】:
我在图像服务器集群前面有一个 nginx 实例:
upstream img-farm-1 {
server 10.0.1.1;
server 10.0.1.2;
server 10.0.1.3;
server 10.0.1.4;
# etc
}
location ~ ^/static: {
rewrite /static:(.*) /$1 break;
proxy_pass http://img-farm-1;
limit_except GET {
allow all;
}
}
这个集群正在被一个即将上线的新集群所取代,有一段时间,我想从旧集群提供图像,但如果图像是新的或已从新集群迁移,则回退到新集群旧的到新的。迁移完成后,我可以回到原来的设置。
所以我认为我可以做到
upstream img-farm-2 {
server 10.0.2.1;
server 10.0.2.2;
server 10.0.2.3;
server 10.0.2.4;
server 10.0.2.5;
# etc
}
location ~ ^/static: {
access_log /var/log/nginx/static.access.log;
rewrite /static:(.*) /$1 break;
proxy_pass http://img-farm-1;
error_page 404 = @fallback-2;
}
location @fallback-2 {
access_log /var/log/nginx/static-2.access.log;
proxy_pass http://img-farm-2;
}
但这不起作用。我在 static.access.log 中看到 404,但 error_page 404 指令没有被执行,因为没有任何内容被写入 static-2.access.log。
我很确定我不能使用try_files,因为,呃,没有任何本地文件,一切都被代理了。
以前有人做过这样的事情吗?我错过了什么?
【问题讨论】: