deny是禁止访问,allow是允许访问。但Nginx的访问控制还是比较复杂的,我们详细介绍一下。

指令优先级

我们先来看一下代码:

  1. location / {
  2. allow 45.76.202.231;
  3. deny all;
  4. }

上面的配置表示只允许45.76.202.231进行访问,其他的IP是禁止访问的。但是如果我们把deny all指令,移动到 allow 45.76.202.231之前,会发生什么那?会发现所有的IP都不允许访问了。这说明了一个问题:就是在同一个块下的两个权限指令,先出现的设置会覆盖后出现的设置(也就是谁先触发,谁起作用)

复杂访问控制权限匹配

在工作中,访问权限的控制需求更加复杂,例如,对于网站下的img(图片目录)是运行所有用户访问,但对于网站下的admin目录则只允许公司内部固定IP访问。这时候仅靠deny和allow这两个指令,是无法实现的。我们需要location块来完成相关的需求匹配。
上面的需求,配置代码如下:

  1. location =/img{
  2. allow all;
  3. }
  4. location =/admin{
  5. deny all;
  6. }

使用正则表达式设置访问权限

只有精确匹配有时是完不成我们的工作任务的,比如现在我们要禁止访问所有php的页面,php的页面大多是后台的管理或者接口代码,所以为了安全我们经常要禁止所有用户访问,而只开放公司内部访问的。

  1. location ~\.php$ {
  2. deny all;
  3. }

这样我们再访问的时候就不能访问以php结尾的文件了。是不是让网站变的安全很多了那?