​Nginx中如何控制URL的访问权限?

 3个月前     2  

文章目录

访问控制是网站安全防范和保护的主要策略,其任务是保证网络资源不被非法访问。在nginx中,我们可以在access阶段(共有11个处理阶段)控制用户对URL的访问,可以使用 allow 和 deny 控制可访问的客户端的源端IP范围,也可以使用auth_basic模块对用户名和密码进行验证等。
​Nginx中如何控制URL的访问权限?

限制某些IP地址的访问权限

Nginx 中提供了两个用于配置访问权限控制的指令,分别为 allow 和 deny。 allow 用于设置允许访问的权限、 deny 用于设置禁止访问的权限 。 在使用时, 权限指令后只需跟上允许或禁止的 IP、IP 段或 all 即可 。其中,all 表示所有的 。
​Nginx中如何控制URL的访问权限?

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

只允许指定IP访问

环境信息:

      • 客户端(A)在本地Windows机器上 :192.168.2.1
      • Nginx服务部署都在192.168.2.129
location / {
            root   html;
            index  index.html index.htm;
            allow 192.168.2.1;
            deny all;
      }
  • 上述指令表示只允许 192.168.2.1 客户端访问,其他所有客户端都不能访问。
  • 需要注意的是,若省略此处的 deny all ,则会允许所有客户端访问
  • 若将 deny all 移动到allow 192.168.2.1 之后,则会阻止所有客户端 访问 。

在本地Windows机器上(192.168.2.1)访问效果如下:
​Nginx中如何控制URL的访问权限?
在服务器(192.168.2.129)访问效果如下:

[root@dev conf]# curl -I http://192.168.2.129/
HTTP/1.1 403 Forbidden
Server: nginx/1.24.0
Date: Sun, 05 Nov 2023 09:17:09 GMT
Content-Type: text/html
Content-Length: 153
Connection: keep-alive

利用auth_basic进行用户密码认证

有时候我们通过Nginx搭建了一台文件服务器,但我们又希望该服务器不让所有人可以访问,比较简单的做法是配置基于HTTP Basic Authutication协议进行用户名和密码的认证。

auth_basic模块

Auth_Buth 模块有两个指令:

  • auth_basic:简单描述
  • auth_basic_user_file:auth_basic_user 文件的路径

用户密码的生成可以使用htpasswd这个工具,需要单独安装,也可以用大多数Linux服务器都会自带的openssl来创建,不需要安装额外的工具。

使用示例

1、生成密码

生成密码
[root@dev passwd]# openssl passwd 123456   # 123456是密码
189VHzkLsdFfY
写入配置文件
[root@dev passwd]# cat > auth_basic_user << EOF
> root:189VHzkLsdFfY
> EOF

把生成的密码和用户名整理成如下格式的文件,取一个自定义的名字,放到Nginx的配置目录下,比如 /home/ap/nginx2/conf/passwd/auth_basic_user.txt

#username:password
root:189VHzkLsdFfY
qiubo:189VHzkLsdFfY

除注释外,这个文件中,每一行是一个Basic Auth格式的用户。以:分割,前一部分是用户名,后一部分是加密后的密码。

2、配置location

location / {
            root   html;
            index  index.html index.htm;
            allow 192.168.2.1;
            deny all;
            auth_basic "Auth Describtion"; #描述信息
            auth_basic_user_file  passwd/auth_basic_user; #密码文件路径
        }

此处使用了Nginx自带的内置模块ngx_http_auth_basic_module,该模块是用来实现Basic Auth的。auth_basicauth_basic_user_file是该模块的两个指令

3、登录验证

重新reload加载配置:
[root@dev nginx2]# ./sbin/nginx -s reload
输入http://192.168.2.129/ 访问就会出现登录的提示:
​Nginx中如何控制URL的访问权限?
所以当我们需要对网站或者URL接口做一个认证的时候,比较简单的做法是通过Nginx配置配置Basic Auth登录认证即可,不用搭建登录认证系统。

暂无评论

暂无评论...