Nginx作为caching代理:尝试第二个上游,如果第一个返回404

对于使用nginx作为caching代理,有没有办法configuration2上游服务器的方式,它总是尝试第一个,除非那个返回404,只有在这种情况下,它会尝试第二个上游?

我知道上游configuration块中的backup选项,但只有在第一个服务器不可用时才会尝试该服务器。 我在说如果第一个服务器可用,但只是那个特定的请求的文件返回404。

我不确定为什么你想要超时或者说50X响应是有效的,但是如果你真的想要404,那么Nginx的文档就是这样解释的:

http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server

max_fails =数

设置在fail_timeout参数设置的持续时间内发生的与服务器通信失败的次数,以便在fail_timeout参数设置的持续时间内将服务器视为不可用。 默认情况下,失败尝试次数设置为1.零值将禁用尝试计费。

这是踢球者:

proxy_next_upstream,fastcgi_next_upstream,uwsgi_next_upstream,scgi_next_upstream和memcached_next_upstream指令定义了什么被认为是不成功的尝试。

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream

语法:proxy_next_upstream错误| 超时| invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | closures…;

http_404服务器返回了代码为404的响应;

这个类似post的答案可以构成你的configuration的基础:

https://stackoverflow.com/a/12878310/4995465

是的,你可以增加一个上游组服务器的weight ,并使用proxy_next_upstream来播放,以包含或排除你不想切换的代码。 这样一来,体重较大的服务器就能满足大多数请求(大多数/less数依赖于权重量,但是有些请求将由第二个服务器来服务)。

不过, backup是正确的使用。 我无法想象不使用某些总是包含所有数据的服务器的原因。