nginx + Lua 设定网站定时关闭
2017年3月12日
因为业务的需要,两会期间需要定时开关 nginx服务器上的网站。
功能
- 可以定时开关网站, 默认设定为早8点~晚21点开放;
- 被关闭的网站访问时会被强行中断连接;
- 设定
geo的white_list_ips可以允许白名单IP不受闭站影响; - 设定
map的white_list_websites可以允许特定的网站(域名)不受闭站影响。
条件
- 需要一个
nginx服务器软件 nginx需要编译带上ngx_http_lua_module模块
由于我们的服务器使用 openresty,因此符合以上条件。
Lua 脚本
1 |
|
在需要管控的网站的 server {} 下附上 access_by_lua_file lua/cron-block.lua; 调用这个Lua文件。
注意文件路径需要改成你实际存放这个脚本的位置,相对路径的起始目录为 nginx 的根目录。
white_list_ips 设置白名单IP
由于业务需要,两会期间依然允许一部分内网IP访问这些关闭的网站。
我们使用 geo 来存放这些IP。
1 | geo $remote_addr $white_list_ips { |
这样,在 10.0.0.0/8 和 192.168.0.0/16 网段的小伙伴就可以不受限制访问到网站了。
white_list_websites 设置域名白名单
由于业务需要,两会期间依然允许一部分网站可以被访问。
我们使用 map 来存放这些网站的域名。
1 | map $server_name $white_list_websites { |
这样,在 example.com 和 system.example.com 这两个网站可以不被关闭。
综合
最后我们把代码揉在一起:
1 | geo $remote_addr $white_list_ips { |
建议把这个代码单独放到一个通用的配置文件里面,让全部的 server 都 include 它。
这样全部的 server 都可以适用这个规则。
如果不需要用这个脚本,直接注释掉 access_by_lua_file 那行即可。
除非注明,麦麦小家文章均为原创,转载请以链接形式标明本文地址。