nginx 配置指定时间段内无法访问
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;
}
}