语法
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来做配置的,直接例子吧。








