Nginx proxy_pass故障转移到一个url而不是服务器

我有一个端点通过Symfony请求我的数据库:
api.domain.com:80/item/123

当请求这个端点时,Ngninx将代理把它传递给一个nodejs服务器,它能够从memcache中获取这个项目:
127.0.0.1:8000/item/123

如果在memcache中找不到该项目,则从另一个PHP端点获取:
api.domain.com:80/item/db/123

它运行良好,但我不知道如何pipe理nodejs失败。 如果nodejs不再响应,我想忽略proxy_pass或使用第二个endpoind(/ item / db / 123)。

我的Nginxconfiguration是:

upstream itemFromNodeJs { server 127.0.0.1:8000; } server { listen 80; server_name api.domain.com 127.0.0.1; location ~*\/item\/([0-9]+)$ { proxy_pass http://itemFromNodeJs; } 

我试图添加一个备份服务器到上游:

 upstream itemFromNodeJs { server 127.0.0.1:8000; server 127.0.0.1:80; } 

当然,它不能工作:当nodejsclosures时无限循环。

我唯一的解决办法是创build一个特定的服务器来从数据库获取数据:

 upstream itemFromNodeJs { server 127.0.0.1:8000; server 127.0.0.1:9000; } 

但是我必须复制整个服务器:它远非优雅。

任何其他的想法?

来自Alexey的好build议!
这是我的新configuration:

 upstream itemFromNodeJs { server 127.0.0.1:8000; } server { listen 80; server_name api.domain.com 127.0.0.1; location ~*\/item\/([0-9]+)$ { proxy_pass http://itemFromNodeJs; error_page 502 = /item/db/$1; } ... } 

那么现在会发生什么?
如果nodejs服务器处于活动状态,那么proxy_pass工作,我们不会进一步。
如果nodejs服务器closures,那么error_page会拦截502错误并转到fallback url,包括url参数($ 1)。 =使得它将状态码从502更改为由回退URL返回的状态码。 这正是我想要的。

人们可以说这是一个“欺骗和廉价的方式”来玩语义:一个错误页面是一个错误页面,而不是一个后备。 我同意,但这也是一个值得尊敬的逻辑:我的代理服务器(nodejs)已closures,从而给出错误…

如果有人有另一种解决scheme,我仍然感兴趣!