deny和allow都是在access阶段
allow和deny都可以在http,server,location,limit_except中使用
如果被deny则会返回“403 Forbidden”报错信息
以下几个场景能够说明清楚这2个命令的具体是怎么用的

location / {
    deny  192.168.1.1;     #支持单个IP
    allow 192.168.1.0/24;  #支持一个网段
    allow 2001:0db8::/32;  #支持ipv6
    deny all;   #支持all匹配到所有
}

# 问:192.168.1.1 匹配到了上面的第1,2,4行,请问该ip是deny还是allow?
# 答:deny和allow是顺序匹配,匹配到即停止。所以第一条匹配到后,就直接deny了


server {
    allow 10.0.9.14;
    listen 8813;
    location / {
        deny 10.0.9.14;
    }
}
#问:10.0.9.14在server中allow和locaton中deny都匹配到,到底是哪个生效?
#答:deny生效。参考变量的生效规则。


#问:如果一个ip没有被deny也没被allow,则怎么处理?
#答:allow


http {
    deny all;
    server {
        allow 10.0.9.14;
        listen 8813;
        location / {
        }
    }
}
#问,除了10.0.9.14,其它的ip是否能够访问?
#答,可以。因为server中已经有了allow或deny指令,所以http中的不生效。没写allow和deny的ip默认是allow


http {
    deny all;
    server {
        listen 8813;
        location / {
        }
    }
}
#问:所有ip能否访问?
#答:不能,因为http中的deny all生效了。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐