来自多个静态源的 Nginx 静态文件

来自多个静态源的 Nginx 静态文件

我有一个在 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 服务器的流量。

相关内容