2

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


我有一种情况,我们有一个域将提供由现有的单独应用程序配置和构建的静态文件(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 以使根目录在不同的计划时间为域活动吗?或者有没有更好的方法来解决我不知道的这个问题?

4

1 回答 1

1

nginx有变量被调用$time_iso8601$time_local你可以用它来构造一个动态根。有关详细信息,请参阅此文档

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

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

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

server {
    root $root;
    ...
}
于 2016-06-25T09:29:08.183 回答