首页 > 系统相关 >nginx根据时间段打开或者关闭某配置项

nginx根据时间段打开或者关闭某配置项

时间:2024-01-08 11:07:38浏览次数:38  
标签:map 匹配 default zA nginx 时间段 关闭 59

先看问题

boss提了一个怪异的需求:每天上班时间8.30-18点可以访问某些url,其他时间段403。

如何解决

可以使用nginx的ngx_http_map_module模块结合ngx_http_access_module模块来实现

具体操作步骤如

1.在nginx中定义map,用来映射时间段,开关状态,url信息

#nginx $time_local 是一个nginx配置文件中的变量,它可以输出当前时间的本地时间戳,格式为:
#[dd/MM/yyyy:HH:mm:ss +0800],其中+0800表示当前时区为东八区

```
map $time_local $enable_feature {
  default off;
  "~^[0-9]{2}/[a-zA-Z]{3}/[0-9]{4}:0[8]:[3-5][0-9]:[0-5][0-9]" on;
  "~^[0-9]{2}/[a-zA-Z]{3}/[0-9]{4}:0[9]:[0-5][0-9]:[0-5][0-9]" on;
  "~^[0-9]{2}/[a-zA-Z]{3}/[0-9]{4}:1[0-7]:[0-5][0-9]:[0-5][0-9]" on;
}

map $request_uri $block {
	default 0;
  ~/servicegateway/test1/web1 1;
  ~/servicegateway/test2/web2 1;
}

map $block$enable_feature $forbid {
	default 0;
  lon 1;
}
```

2.在需要开关的配置项中使用if语句判断开关状态

if ($forbid = 0){
	return 403;
}

#注意:使用if语句和map模块可能会影响nginx性能,建议在高并发场景下使用其他方法实现

正则详解:
以下是匹配nginx日志中时间的正则表达式:
```
\d{1,2}/[a-zA-Z]{3}/\d{4}:\d{2}:\d{2}:\d{2}[+-]\d{4}
```
这个正则表达式可以匹配类似于以下格式的时间字符串:
```
01/Jan/2023:10:22:59 +0800
```

- `\d{2} | [0-9]{2}` 表示匹配两位数字
- `\w{3} | [a-zA-Z]{3}` 表示匹配三个字母
- `:` 和空格表示匹配一个冒号和空格
- `\s` 表示匹配一个空格
- `\+` 表示匹配一个加号
- `[+-]\d{4}` 表示匹配+或者-符号和四位数字

常用map定义

#根据访问的客户端访问不同的url
map $http_user_agent $mobile {
	default 0;
  ~*mobile|nokia|iphone|ipad|android|samsung|htc|blackberry 1;
}

其他配置(可自行尝试):

map $time_local $enable_feature {
        default 0;
        ~* "08:00-17:59" 1;
        ~* "00:00-07:59" 0;
    }


标签:map,匹配,default,zA,nginx,时间段,关闭,59
From: https://blog.51cto.com/u_11873474/9140057

相关文章

  • linux下使用heartbeat做HA集群,把nginx作为HA对应的服务
    通过安装该Linux-HA软件,可以实现Linux双机系统的高可用性解决方案,实现双机系统的热备份,并能够做到双机之间的无缝切换,从而对外提供稳定可靠的服务,最终实现系统高性能RAS(reliability,availability,andserviceability)。这里使用heartbeat来做HA集群,并且把nginx服务作为HA对应的服......
  • nginx反向代理SSH和远程桌面连接
       今天在实施一个项目过程中,防火墙厂家已经配置SSH和远程桌面连接的映射关系,为了网络更安全将采取在系统centos7.9安装nginx反向代理SSH和远程桌面连接的办法,现将实现过程记录如下:一、安装nginx(省略)二、查看./nginx-V[root@node1nginx]#cd/usr/local/nginx/[root@node......
  • Nginx基础篇:Nginx搭建、Nginx反向代理、文件服务器部署配置。
    (NginxLinux系统安装以及反向代理的配置)简介Nginx(enginex)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日。其将源代......
  • NGINX文件名漏洞(CVE-2013-4547)
    影响版本Nignx0.8.41~1.4.3/1.5.0~1.5.7漏洞原因由于nginx的版本原因+运维人的问题导致,其实和低版本nginx漏洞问题差不大多,也属于nginx解析漏洞的一种复现nginx版本上传文件-给文件名添加空格和php代码直接访问图片-失败恶意访问-成功修改请求找到两个空格(......
  • nginx低版本文件解析漏洞
    nginx低版本设计问题,会将图片解析成php文件复现查看nginx版本,符合低版本特征接下来我们随便上传一个图片文件,拦截这个请求,并且添加php代码。图片上传成功访问这个文件-可以正常访问接下来我们恶意访问,发现php代码被执行。......
  • Nginx Rewrite 对 “空” 和 “杠” 的处理
    在/usr/share/nginx/html目录下有个一index.html文件。1、常规需求配置http://www.abc.com/html/xxx的请求全部在/usr/share/nginx/html目录下寻找资源server{listen80;server_namewww.abc.com;location/html{root/usr/share/nginx;}}这......
  • Nginx转发解析长域名多路径域名
    ​Nginx解析短域名,例如:访问http://192.168.1.23可直接跳转到http://192.168.1.23/webroot/decisionserver{listen90;server_namelocalhost;#匹配/转到/webroot/decision上;#^(.*)$表示/后任意部分,除非和其他location匹配否则一律转向/webroot/dec......
  • nginx配置多个站点共用80端口,不算端口冲突吗?
    在使用Nginx配置多个站点时,可以将它们共享一个端口(例如80端口)。这是因为Nginx使用虚拟主机(VirtualHost)的概念,通过对访问请求进行区分,将请求发送到不同的站点。Nginx的配置文件中,可以通过server块来定义不同的虚拟主机。每个server块中可以指定不同的域名或IP地址,并设置对应的站点......
  • UOS配置nginx
    WEB服务安装nginx软件包;配置文件名为ispweb.conf,放置在/etc/nginx/conf.d/目录下;网站根目录为/mut/crypt(目录不存在需创建);启用FastCGI功能,让nginx能够解析php请求;index.php内容使用Welcometo2022ComputerNetworkApplicationcontest!一、安装nginx、php[root@isp......
  • 记录一次,nginx平滑升级,不需要停止nginx服务,不影响业务访问
    #下载新版本nginxwgethttp://nginx.org/download/nginx-1.24.0.tar.gz#解压并安装tarxfnginx-1.24.0.tar.gzcdnginx-1.24.0./configure--prefix=/usr/local/nginx--user=nginx--group=nginx\--with-http_ssl_module\--with-http_gzip_static_module\--with-poll_mo......