18、nginx访问控制

1.权限控制指令

  • Nginx中提供了两个用于配置访问权限控制的指令,分别为allowdeny
    • allow用于设置允许访问的权限
    • deny用于设置禁止访问的权限。
  • 在使用时,权限指令后只需跟上允许或禁止的IPIP段all即可。
    • 其中all表示所有的。
    • 单个IP指定作用范围最小,all指定作用范围最大。
    • 同一块下,若同时存在多个权限指令(deny、allow),则先出现的访问权限设置生效并且会对后出现的设置进行覆盖,未覆盖的范围依然生效,否则以先出现的设置为准。
    • 当多个块(如http、server、location)中都出现了权限设置指令,则内层块中的权限级别要比外层块中设置的权限级别高。

demo演示以上功能

### 1.1 准备环境

由于权限的控制测试,需要涉及不同的IP。因此,需要准备多台虚拟机,1台作为Nginx服务器,如192.168.78.3。另外几台作为客户端,如192.168.78.128192.168.78.200,通过curl访问服务器192.168.78.3进行测试。

1.2 默认访问权限

打开IP地址为192.168.78.3的Nginx服务器配置文件,按照如下配置修改server 块后,平滑重启Nginx,使配置生效。

server{
    listen 80;
	server_name localhost;
    root index index.html index.htm;

为了方便测试,在 index.html文件中输出一行提示信息,如下所示

<h1>Welcome 192.168.78.3!</h1>

接着,利用之前准备的两个客户端192.168.78.128192.168.78.200,通过curl请求服务器地址192.168.78.3,具体命令如下。

curl http://192.168.78.3

虚拟主机默认是未设置访问权限,允许所有用户的访问,效果相当于server设置为allow all

image

1.3 禁止访问

禁止所有的客户端访问

server {
    deny all
}

image

需要注意的是,在server块下设置deny all后,服务器192.168.78.3内的客户端软件在访问自己时也会出现403 Forbidden,设置时需要慎重考虑。

1.4 允许特定IP访问

允许特定用户访问,仅允许客户端192.168.78.128访问。

server {
	allow 192.168.78.128:
	deny all;    
}

image

需要注意的是,若省略deny all,则会允许所有客户端访问,若将deny all移动到 allow 192.168.78.128之后,则会阻止所有客户端访问。

从上述规律看出,同一个块下的两个权限指令,先出现的设置会覆盖后出现的设置,使得allow 192.168.78.128的配置优先生效;同时deny指令设置的访问范围all较大,未被allow覆盖的范围配置依然生效,除了IP为192.168.78.128的用户外,禁止其他用户对服务器访问的效果。

1.5 不同块间的权限指令优先级

  • 为了测试不同块间的权限指令优先级,重新配置服务器192.168.78.3的权限设置,在http块中设置禁止所有用户对http块的访问,在第一个server块配置允许所有访问具体配置如下。

    http {
    	deny all;
    	server {
            listen 80;
            server_name localhost;
            root html;
            index index.html index.htm;
            allow all;
        }
        server {
            listen 8080;
            server_name localhost;
            root html;
            index index.html index.htm;
        }
    }
    

    内层 sever块的 allow all覆盖了 外层http块的 deny all,其他模块的deny all权限不变

    image

posted on 2024-01-18 10:44  ccblblog  阅读(213)  评论(0)    收藏  举报

导航