Nginx访问控制与参数调优的方法

2019-10-17 16:54:43于丽

语法
location的语法规则:location [=|~|~*|^~] /uri/ { … }
location匹配的变量是$uri
关于几种字符的说明

字符 描述
= 表示精准匹配
~ 表示区分大小写的正则匹配
~* 表示不区分大小写的正则匹配
^~ 表示uri以指定字符或字符串开头
/ 通用匹配,任何请求都会匹配到

规则优先级

= 高于 ^~ 高于 ~* 等于 ~ 高于 /

示例1

location = "/12.jpg" { ... }
如:
www.syushin.com/12.jpg 匹配
www.syushin.com/abc/12.jpg 不匹配

location ^~ "/abc/" { ... }
如:
www.syushin.com/abc/123.html 匹配
www.syushin.com/a/abc/123.jpg 不匹配

location ~ "png" { ... }
如:
www.syushin.com/aaa/bbb/ccc/123.png 匹配
www.syushin.com/aaa/png/123.html 匹配

location ~* "png" { ... }
如:
www.syushin.com/aaa/bbb/ccc/123.PNG 匹配
www.syushin.com/aaa/png/123.html 匹配


location /admin/ { ... }
如:
www.syushin.com/admin/aaa/1.php 匹配
www.syushin.com/123/admin/1.php 不匹配

注意:

有些资料上介绍location支持不匹配 !~如: location !~ 'png'{ ... }

这是错误的,location不支持 !~

如果有这样的需求,可以通过if(location优先级小于if )来实现,如: if ($uri !~ 'png') { ... }

访问控制

web2.0时代,很多网站都是以用户为中心,网站允许用户发布内容到服务器。由于为用户开放了上传功能,因此有很大的安全风险,比如黑客上传木马程序等等。因此,访问控制就很有必要配置了。

deny与allow

字面上很容易理解就是拒绝和允许。

Nginx的deny和allow指令是由ngx_http_access_module模块提供,Nginx安装默认内置了该模块。

语法

语法:allow/deny address | CIDR | unix: | all

它表示,允许/拒绝某个ip或者一个ip段访问.如果指定unix:,那将允许socket的访问。

注意:unix在1.5.1中新加入的功能。

在nginx中,allow和deny的规则是按顺序执行的。

示例1:

location /
{
  allow 192.168.0.0/24;
  allow 127.0.0.1;
  deny all;
}

说明:这段配置值允许192.168.0.0/24网段和127.0.0.1的请求,其他来源IP全部拒绝。

示例2:

location ~ "admin"
{
  allow 192.168.30.7;
  deny all
}

说明:访问的uri中包含admin的请求,只允许192.168.30.7这个IP的请求。

基于location的访问控制

日常上,访问控制基本是配合location来做配置的,直接例子吧。