server 内添加配置:

# 获取本地时间
if ( $time_local ~ "^(\d+)\/(\w+)\/(\d+):(\d+):(\d+):(\d+) \+(\d+)" ) {
  set $hour $4;
}

# 指定时间黑名单,如果为指定时间,返回500
if ( $hour ~ 22|23|00|01|02|03|04|05 ) {
  return 500;
}

这样就实现了晚上 10点~凌晨5点之间无法访问,6点以后才能正常访问。

如果需要跳转页面,把 return 500; 改为 rewrite ^(.*)$ /your/target/page.html break; 就可以了。

比如:

if ( $hour ~ 22|23|00|01|02|03|04|05 ) {
  rewrite ^(.*)$ /demo-page.html break;
}

下面是来自网友的一段情况稍微复杂一点的配置

注意,如果你的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;
   }
}

标签: none