定时更改 nginx 根目录
Change nginx Root Directory at Scheduled Time
首先声明一下,我不是服务器管理员,所以我很可能会在这里问 "wrong" 个问题。
我遇到这样一种情况,我们有一个域将提供由现有的单独应用程序配置和构建的静态文件(HTML、图像等)。在特定的预定日期时间,我们需要将网站内容更改为一组不同的静态文件。
由于文件都会提前准备好,我想知道nginx是否可以"switch"根目录根据这些预定的日期时间将流量引导到适当的位置。
所以如果有一系列目录可能是这样的:
/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,使根目录在不同的计划时间对域有效?或者有没有我不知道的更好的方法来解决这个问题?
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;
...
}
首先声明一下,我不是服务器管理员,所以我很可能会在这里问 "wrong" 个问题。
我遇到这样一种情况,我们有一个域将提供由现有的单独应用程序配置和构建的静态文件(HTML、图像等)。在特定的预定日期时间,我们需要将网站内容更改为一组不同的静态文件。
由于文件都会提前准备好,我想知道nginx是否可以"switch"根目录根据这些预定的日期时间将流量引导到适当的位置。
所以如果有一系列目录可能是这样的:
/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,使根目录在不同的计划时间对域有效?或者有没有我不知道的更好的方法来解决这个问题?
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;
...
}