3、Nginx访问控制

作者 : 开心源码 本文共2042个字,预计阅读时间需要6分钟 发布时间: 2022-05-11 共130人阅读

Nginx中提供了两个使用于配置访问权限控制的指令,分别为allowdeny

allow使用于设置允许访问的权限,deny使用于设置禁止访问的权限。

在用时,权限指令后只要跟上允许或者禁止的IP,IP段或者all就可,其中,all表示所有的;

权限控制指令用注意点:

  • 单个IP指定作使用范围作使用小,all指定作使用范围最大;

  • 同一块下,若同时存在多个权限指令,则先出现的访问权限设置生效,并且会对后出现的设置进行覆盖,未覆盖的范围仍然生效,否则以先出现的设置为准;

  • 当多个块中都出现了权限设置指令,则内层块中的权限级别要比外层块中设置的权限级别高;

访问控制实例:

1、默认访问权限:

准备两台虚拟机,保证3台虚拟机网络通信相互正常;

修改Nginx服务器配置文件:

3、Nginx访问控制

利使用准备好的两台机器访问Nginx服务器:curl http://192.168.44.31,返回对应index内容,表明虚拟机默认未设置访问权限,允许所有使用户的访问,相当于为server设置了allow all。

3、Nginx访问控制

2、禁止所使用使用户访问:

此时修改配置(禁止所有的用户端访问)如下后重启Nginx(service nginx restart):

3、Nginx访问控制

再次访问返回如下错误,表明禁止访问成功:

3、Nginx访问控制

3、只允许指定使用户访问设置:

设置只允许33机器访问,禁止32机器访问,修改配置如下重启Nginx:

3、Nginx访问控制

此时33机器访问返回成功

3、Nginx访问控制

此时32机器访问失败

3、Nginx访问控制

4、不同块的权限指令优先级:

修改配置如下,重启Nginx服务:

3、Nginx访问控制

用33,32机器再次访问出现上述错误返回403;

再次修改配置,在server里添加配置如下,重启Nginx服务:

3、Nginx访问控制

再次用33,32机器访问返回成功;

以上是因为Nginx配置文件中的各个块在嵌套的情况下,内层块内的指令比外层块内的指令执行优先级高,因而,当内外层中同时出现权限指令时,则内层块中的allow all会覆盖外层块的deny all的设置;

在实际应使用中,权限控制的需求更加复杂,仅靠deny和allow这两个指令不可以满足实际需求,还需要用location块来完成相关匹配;

location前缀说明:

  • =:根据其后的指定模式进行准确匹配;

  • ~:用正则表达式完成location的匹配,区分大小写;

  • ~*:用正则表达式完成location的匹配,不区分大小写;

  • *~:不用正则表达式,完成以指定模式开头的location匹配;

  • @:使用于定义一个location块,且该块不可以被外部用户端访问,只可以被Nginx内部配置指令所访问;

访问控制复杂应使用:

1、精准匹配

精准匹配是指使用户访问的URI与指定的URI完全一致的情况才会执行其后的指令块;

配置如下:

3、Nginx访问控制

33访问结果:

3、Nginx访问控制

32访问结果:

3、Nginx访问控制

从结果能看出准确匹配是只有使用户请求的URI和location定义的匹配模式完全一致情况下才会执行的指令块,否则匹配不成功;

2、正则匹配

Nginx配置文件中,多个正则location之间按照正则location在配置文件中的书写顺序进行匹配,且只需匹配成功就不会继续匹配后面定义的正则location;

配置如下:

3、Nginx访问控制

通过访问返回如下结果:

3、Nginx访问控制

3、Nginx访问控制

此时我们将配置顺序调换位置,如下:

3、Nginx访问控制

此时返回结果都是404:

3、Nginx访问控制

3、Nginx访问控制

3、最大前缀匹配

因为location能同时定义多个,当一个配置文件中 同时出现多个location时,普通location之间遵循最大前缀匹配准则,简单讲就是匹配度最高的location将会执行;

配置如下:

3、Nginx访问控制

访问结果如下:

3、Nginx访问控制

3、Nginx访问控制

3、Nginx访问控制

3、Nginx访问控制

当最大前缀location与正则location同时存在时,假如正则location匹配成功,则不会执行最大前缀location:

配置如下:

3、Nginx访问控制

location /定义的是最大前缀location,使用于匹配当前网站根目录下所有文件;

~\.html$使用正则匹配所有以.html结尾的url;

不同url对应的响应结果如下:

3、Nginx访问控制

3、Nginx访问控制

3、Nginx访问控制

从上述结果能看出访问192.168.44.31时完成了第一个匹配;

而aa.html时符号正则location因而返回了404;

aa.jsp因为不符合正则location因而匹配了最大前缀location返回了403。

4、禁使用正则匹配

利使用=精准匹配或者^~非正则匹配能在正则匹配之前优先匹配,从而禁止执行原有的正则匹配。

配置如下:

3、Nginx访问控制

访问结果:

3、Nginx访问控制

3、Nginx访问控制

3、Nginx访问控制

3、Nginx访问控制

上述配置中,第一个配置使用于准确匹配网站根目录下的/aaa/test.html,

第二个配置使用于非正则匹配网站根目录下的文件,

第三个配置使用于正则匹配网站根目录下以.htm结尾的文件;

从结果能看出,在用了“=”或者“^~”前缀时,普通location匹配后将不再执行正则location的匹配;

“^~”仍然遵循最大前缀匹配规则,=则严格按照准确匹配执行;

当多种类型的location匹配同时出现时,最终执行结果为

“=”匹配 > “^~”匹配 > 正则匹配 > 普通的最大前缀匹配

只需优先的location匹配成功 ,就不会执行其余的location;

上篇:2、认识Nginx配置文件

下篇:4、Nginx日志文件

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 3、Nginx访问控制

发表回复