指令优先级
我们先来看一下代码:
location / {
allow 45.76.202.231;
deny all;
}
上面的配置表示只允许45.76.202.231进行访问,其他的 IP 是禁止访问的。但是如果我们把deny all指令,移动到 allow 45.76.202.231之前,会发生什么那?会发现所有的 IP 都不允许访问了。这说明了一个问题:就是在同一个块下的两个权限指令,先出现的设置会覆盖后出现的设置(也就是谁先触发,谁起作用)。
复杂访问控制权限匹配
在工作中,访问权限的控制需求更加复杂,例如,对于网站下的 img(图片目录)是运行所有用户访问,但对于网站下的 admin 目录则只允许公司内部固定 IP 访问。这时候仅靠 deny 和 allow 这两个指令,是无法实现的。我们需要 location 块来完成相关的需求匹配。
上面的需求,配置代码如下:
location =/img{
allow all;
}
location =/admin{
deny all;
}
=号代表精确匹配,使用了=后是根据其后的模式进行精确匹配。这个直接关系到我们网站的安全,一定要学会。
使用正则表达式设置访问权限
只有精确匹配有时是完不成我们的工作任务的,比如现在我们要禁止访问所有 php 的页面,php 的页面大多是后台的管理或者接口代码,所以为了安全我们经常要禁止所有用户访问,而只开放公司内部访问的。
代码如下:
location ~\.php$ {
deny all;
}
这样我们再访问的时候就不能访问以 php 结尾的文件了。