前言:
今天看官们对“控件通过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访问