我正在寻找解决scheme来自动化我们的应用程序的部署过程之一。 在开始部署时,我想以编程方式将指定的服务器设置为维护模式,最后在部署完成后,从nginx服务器中删除维护模式标志。
通过维护模式,我的意思是nginx应该以HTTP响应代码503响应所有的请求(可能的自定义页面)。
我知道如何设置服务器块与503代码(请参阅http://www.cyberciti.biz/faq/custom-nginx-maintenance-page-with-http503/ ),但问题是关于如何以编程方式并最有效地。
我脑海中有两种select:
选项1:在部署过程开始时,将维护文件写入文档根目录,并有条件地检查nginx服务器configuration中是否存在维护文件:
server { if (-f $document_root/in_maintenance_mode) { return 503; } }
此方法包含一定的开销,因为检查每个请求的文件存在。 只有在加载nginxconfiguration文件时才能检查文件是否存在?
选项2:部署脚本用维护版本replace整个nginx服务器configuration文件,并在部署结束时将其交换回来。 如果使用此方法,我担心可能会覆盖维护configuration文件的其他自动化进程(如puppet)。
选项1是最好的select。 如果额外的文件请求困扰你(虽然它几乎没有开销),你可以把它replace成variables检查:
set $maintenance "on"; if ($maintenance = "on") { return 503; }
我做的是这样的:
使用下面的代码片段:
... error_page 502 503 /_maintenance/index.html; location ^~ /_maintenance { alias some/place/on/your/disk/static/_maintenance; } ...