在预定时间更改nginx根目录

时间:2016-06-24 20:34:43

标签: nginx nginx-location

让我快速说明我不是服务器管理员,所以我很可能在这里问“错误”的问题。

我的情况是,我们有一个域,它将提供由现有的独立应用程序配置和构建的静态文件(HTML,图像等)。在某些预定的日期时间,我们需要将站点的内容更改为一组不同的静态文件。

由于文件将全部提前准备好,我想知道nginx是否有可能“切换”根目录,根据这些预定的日期时间将流量引导到适当的地方。

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

  • /www.example.com-20160701000000/content/public
  • /www.example.com-20160708000000/content/public
  • /www.example.com-20160801120000/content/public

然后配置会说从2016年7月1日00:00:00到2016年7月7日23:59:59,www.example.com的网站根目录为/www.example.com-20160701000000/content/public,依此类推。

我研究过的其他一些事情:

  • 某些形式的中间件,如PHP,但我想避免这种便携性。
  • SSI似乎不是一个选择。看起来我有一个根目录,在index.html中,内容类似于<!--# include file="www.example.com-$datestamp/content/public/index.html" -->,但似乎我必须为每个页面执行此操作?如果版本之间的页面名称不同,我也不确定它是如何工作的。
  • 一个cron作业或其他任何移动文件或在适当的时间编辑文件的东西,这似乎是一个非常糟糕的潜在失败点。

所以tl; dr,可以通过某种方式配置nginx,以便在不同的预定时间拥有对域有效的根目录吗?或者是否有更好的解决这个问题的方法,我不知道?

1 个答案:

答案 0 :(得分:1)

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;
    ...
}