18、nginx访问控制
1.权限控制指令
- Nginx中提供了两个用于配置访问权限控制的指令,分别为
allow和deny。- allow用于设置允许访问的权限
- deny用于设置禁止访问的权限。
- 在使用时,权限指令后只需跟上允许或禁止的
IP、IP段或all即可。- 其中
all表示所有的。 - 单个IP指定作用范围最小,
all指定作用范围最大。 - 同一块下,若同时存在多个权限指令(deny、allow),则先出现的访问权限设置生效并且会对后出现的设置进行覆盖,未覆盖的范围依然生效,否则以先出现的设置为准。
- 当多个块(如http、server、location)中都出现了权限设置指令,则内层块中的权限级别要比外层块中设置的权限级别高。
- 其中
demo演示以上功能
### 1.1 准备环境
由于权限的控制测试,需要涉及不同的IP。因此,需要准备多台虚拟机,1台作为Nginx服务器,如192.168.78.3。另外几台作为客户端,如192.168.78.128和192.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.128和192.168.78.200,通过curl请求服务器地址192.168.78.3,具体命令如下。
curl http://192.168.78.3
虚拟主机默认是未设置访问权限,允许所有用户的访问,效果相当于server设置为allow all。

1.3 禁止访问
禁止所有的客户端访问
server {
deny all
}

需要注意的是,在server块下设置deny all后,服务器
192.168.78.3内的客户端软件在访问自己时也会出现403 Forbidden,设置时需要慎重考虑。
1.4 允许特定IP访问
允许特定用户访问,仅允许客户端192.168.78.128访问。
server {
allow 192.168.78.128:
deny all;
}

需要注意的是,若省略
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]()

浙公网安备 33010602011771号