![防止 nginx 反向代理在未找到上游时“忽略”崩溃](https://linux22.com/image/747028/%E9%98%B2%E6%AD%A2%20nginx%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E5%9C%A8%E6%9C%AA%E6%89%BE%E5%88%B0%E4%B8%8A%E6%B8%B8%E6%97%B6%E2%80%9C%E5%BF%BD%E7%95%A5%E2%80%9D%E5%B4%A9%E6%BA%83.png)
在我们的应用程序中,我们严重依赖docker,并使用模块化方法保持整个应用程序的可管理和可维护性。基本上任何调用都会通过nginx服务,该服务将调用重定向(反向代理)到正确的后端。
位置如下:
location /api/entry {
proxy_pass http://entry:1337;
}
location /api/rover {
proxy_pass http://rover:1337;
}
和entry
是rover
(nodejs) 后端 docker 的名称。这种方法对我们的应用程序很重要,因为我们希望即使某个模块(探测车/入口)长时间停止工作,一切仍能正常运转。
问题是,当其中一个模块不可用时,nginx 似乎不希望启动。(docker 未启动)。这意味着如果某个模块被禁用一段时间,并且 nginx 重新启动(由于某些随机原因或某种更新),整个系统将无法正常工作。
我尝试通过在以下位置添加解析器来修复此问题:
location /api/entry {
resolver 127.0.0.1 valid=30s;
proxy_pass http://entry:1337;
}
然而即使这样,服务器也会在 30 秒后崩溃。
我看到的另一个建议是手动输入 IP 地址:但这与我们想要做的相去甚远。我们实际上使用 docker bridges因为那么我们就不必关心实际的 IP 地址,它对外界来说是“隐藏”的。