在我们的应用程序中,我们严重依赖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 地址,它对外界来说是“隐藏”的。