龙空技术网

3、Nginx访问控制

猿码笔记 3267

前言:

今天看官们对“控件通过nginx访问”大约比较关怀,大家都想要了解一些“控件通过nginx访问”的相关内容。那么小编也在网摘上汇集了一些有关“控件通过nginx访问””的相关内容,希望咱们能喜欢,各位老铁们快快来学习一下吧!

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

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

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

权限控制指令使用注意点:

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

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

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

访问控制实例:

1、默认访问权限:

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

修改Nginx服务器配置文件:

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

2、禁止所用用户访问:

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

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

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

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

此时33机器访问返回成功

此时32机器访问失败

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

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

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

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

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

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

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

location前缀说明:

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

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

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

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

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

访问控制复杂应用:

1、精准匹配

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

配置如下:

33访问结果:

32访问结果:

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

2、正则匹配

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

配置如下:

通过访问返回如下结果:

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

此时返回结果都是404:

3、最大前缀匹配

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

配置如下:

访问结果如下:

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

配置如下:

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

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

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

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

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

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

4、禁用正则匹配

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

配置如下:

访问结果:

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

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

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

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

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

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

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

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

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

下篇:4、Nginx日志文件

标签: #控件通过nginx访问