Nginx设置时间段允许访问,在非时间段内跳转维护

在实际业务需求中,要求在工作时间段(07:30~18:00)内允许访问系统,在非工作时间段内访问系统时跳转维护。

通过上网查阅资料,有几种方式可以实现基于时间段进行开放访问或维护:
1、Windows服务器创建定时任务,定时重启nginx并切换配置。
2、通过nginx配置定时控制访问或维护。

使用windows的定时任务过于麻烦,而且不一定稳定,有些服务器可能是linux,所以决定使用nginx配置的方式。

nginx配置文件如下:

server {
        listen       80;
        server_name  localhost;
		location / {
		# 获取本地时间,并转换为对应格式,将时分设置到变量中
		if ($time_local ~ "^(\d+)\/(\w+)\/(\d+):(\d+):(\d+):(\d+) \+(\d+)") {
			set $hour $4:$5;
		}
		# 判断变量中的时分,是否处于非工作时间,是则调整维护
		if ($hour ~ "^((0[0-6]|2[0-4]|1[8-9]):[0-9][0-9])|(07:[0-2][0-9])") {
			rewrite ^(.*)$ /50x.html break;
		}
		# 此处相当于else,正常访问
        root   html;
        index  index.html index.htm;
       }
}

注意,如果你的nginx中如果配置了负载均衡和代理,则使用以上配置跳转代理页面可能会有问题。

此时只需将重定向(rewrite)维护页面修改为代理维护页面即可,在nginx中添加维护页面的代理:

server {
        listen       8847;
        server_name  localhost;
     	client_max_body_size 1024m;
        location / {
           rewrite ^/(.*)$ /50x.html break;
        }
    }

修改业务系统的server配置:

server {
        listen       80;
        server_name  localhost;
		location / {
		# 获取本地时间,并转换为对应格式,将时分设置到变量中
		if ($time_local ~ "^(\d+)\/(\w+)\/(\d+):(\d+):(\d+):(\d+) \+(\d+)") {
			set $hour $4:$5;
		}
		# 判断变量中的时分,是否处于非工作时间,是则调整维护
		if ($hour ~ "^((0[0-6]|2[0-4]|1[8-9]):[0-9][0-9])|(07:[0-2][0-9])") {
			# 此处将重定向修改为代理即可
			proxy_pass http://localhost:8847; break; 
		}
		# 此处相当于else,正常访问
        proxy_pass http://xxxxxxxx;
       }
}

至此已经可以实现业务需求,特此记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值