我有一个在 Gunicorn 上运行的 Django 应用程序。我正在尝试配置 Nginx 来提供静态文件。我有两个上游服务器,它们来自两个不同的目录,以及两个不同的 Gunicorn 实例。通常,两个文件夹中的代码相同,但是当我需要更新代码时,我会将其中一个 Gunicorn 实例脱机,以便 Nginx 停止将流量路由到该实例,更新代码,然后重新打开 Gunicorn。
有两个静态目录(一个来自主 Gunicorn 实例,一个来自辅助实例)。当我对主实例进行更新时,流量不再路由到主实例,并且我不希望 Nginx 从主静态目录中提供静态文件。
我该如何配置 Nginx 来实现这一点?基本上,我需要两个静态根,一个链接到每个上游服务器。
答案1
我不知道如何在 Nginx 实例中自动执行此操作,因为您谈论的是静态文件服务背后的路由决策。也许如果 Nginx 公开一些与当前请求无关的整体代理/路由服务的环境信息?变量不过,提到的看起来是在路由后填充的。
否则,我能想到两个选择。你可以有多个 nginx 配置文件:双重配置、主配置、辅助配置
N/NP/NS
/ \
GP GS
当你想要更改拓扑时,将配置(或使用脚本进行修改)复制到位并重新配置。
或者,您可以运行两个 Nginx 实例(主、辅)服务器,每个服务器都配置了相应的静态目录和 gunicorn 实例。然后在发布期间通过主/辅 Nginx 而不是通过 Gunicorn 来控制流量。
N
/ \
NP NS
| |
GP GS
您仍然需要一些前端的东西,比如 nginx 实例、负载均衡器或 DNS 流量管理,以引导/控制到您的两个 Web 服务器的流量。