定时更改 nginx 根目录

Change nginx Root Directory at Scheduled Time

首先声明一下,我不是服务器管理员,所以我很可能会在这里问 "wrong" 个问题。


我遇到这样一种情况,我们有一个域将提供由现有的单独应用程序配置和构建的静态文件(HTML、图像等)。在特定的预定日期时间,我们需要将网站内容更改为一组不同的静态文件。

由于文件都会提前准备好,我想知道nginx是否可以"switch"根目录根据这些预定的日期时间将流量引导到适当的位置。

所以如果有一系列目录可能是这样的:

然后配置会说从 2016 年 7 月 1 日 00:00:00 到 2016 年 7 月 7 日 23:59:59,www.example.com 的站点根目录是 /www.example.com-20160701000000/content/public,等等第四。

我调查过的其他一些事情:

那么 tl;dr,能否以某种方式配置 nginx,使根目录在不同的计划时间对域有效?或者有没有我不知道的更好的方法来解决这个问题?

nginx 具有名为 $time_iso8601$time_local 的变量,您可以使用它们来构建动态根。有关详细信息,请参阅 this document

一种方法是将您的规则构造为映射,并使用映射变量或命名捕获适当地设置 root 指令。有关详细信息,请参阅 this document

我用这个测试了这个概念:

map $time_iso8601 $root {
    default          /usr/local/www/test;
    ~^2016-06-2[0-9] /usr/local/www/test/test-20160625;
}

server {
    root $root;
    ...
}