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
那行即可。
除非注明,麦麦小家文章均为原创,转载请以链接形式标明本文地址。