WEB服务与NGINX(10)-NGINX访问控制功能



1.NGINX访问控制功能

nginx的访问控制有两种方式:

  • 基于ip进行限制,由ngx_http_access_module模块提供;
  • 对特定网页进行用户名密码认证,由ngx_http_auth_basic_module模块提供;

1.1 基于ip地址的访问控制

  • allow address | CIDR | unix: | all;

    允许访问指定的网络或地址,如果指定unix:,表示运行UNIX-domain所有套接字

    支持环境:http, server, location, limit_except

  • deny address | CIDR | unix: | all;

    允许访问指定的网络或地址

    支持环境:http, server, location, limit_except

匹配规则为:自上而下检查,一旦匹配,将生效,不再向下匹配所以条件严格的置前。

  • 场景一:只允许指定的来源IP访问/imags目录

    [root@nginx01 ~]# vim /etc/nginx/conf.d/virtualhost.conf
    server {
    	listen 80;
    	server_name www.nginx01.com;
    
    	location / {
    		root /data/nginx/html/web1;
    		index index.html;
    	}
    	location /image {
    		root /data/nginx/html/web1/
    		allow 172.0.0.1;
    		allow 192.168.20.0/24;
    		deny all;
    	}
    }
    
    
  • 场景二:禁止特定客户端IP访问/images目录,其他IP允许访问

    [root@nginx01 ~]# vim /etc/nginx/conf.d/virtualhost.conf
    server {
    	listen 80;
    	server_name www.nginx01.com;
    
    	location / {
    		root /data/nginx/html/web1;
    		index index.html;
    	}
    	location /image {
    		root /data/nginx/html/web1/
    		deny 172.16.0.0/16;
    		allow all;
    	}
    }
    

1.2 基于用户名密码的认证

  • auth_basic string | off;

    启用使用“HTTP基本身份验证”协议验证用户名和密码,默认为off,string为提示信息。

    支持环境:http, server, location, limit_except

  • auth_basic_user_file file;

    指定以下列格式保存用户名和密码的文件进行验证

    支持环境:http, server, location, limit_except

  • 用户口令文件格式:

    明文文本:格式name:password:comment

    # comment

    name1:password1

    name2:password2:comment

    name3:password3

    加密文本:由htpasswd命令实现,命令由httpd-tools所提供。

  • htpasswd命令的用法如下:

    htpasswd [options] /PATH/HTTPD_PASSWD_FILE username

    选项

    -c 自动创建文件,仅首次时使用,再次使用会覆盖

    -p 明文密码

    -d CRYPT格式加密,默认

    -m md5格式加密

    -s sha格式加密

    D 删除指定用户

    -b:批模式添加用户,类似于passwd –stdin,多用于脚本。

  • 场景示例:为/login或/admin目录下的内容提供用户认证保护:

    #1.nginx的配置文件如下:
    [root@nginx01 ~]# vim /etc/nginx/conf.d/virtualhost.conf
    server {
    	listen 80;
    	server_name www.nginx01.com;
    	charset utf-8,gbk;
    
    	location / {
    		root /data/nginx/html/web1;
    		index index.html;
    	}
            
    	location ~* /(admin|login) {
    		root /data/nginx/html/web1/;
    		auth_basic "please login!";            <==提示信息
    		auth_basic_user_file /etc/nginx/.nginxuser;   <==密码文件
    	}
    }
    
    #2.重启nginx服务
    [root@nginx01 web1]# systemctl reload nginx.service
    
    #3.建立admin,login相关目录
    [root@nginx01 ~]# cd /data/nginx/html/web1/
    [root@nginx01 web1]# mkdir admin
    [root@nginx01 web1]# mkdir login
    [root@nginx01 web1]# echo "admin area" > admin/index.html
    [root@nginx01 web1]# echo "login area" > login/index.html
    
    #4.使用htpasswd工具建立密码文件
    [root@nginx01 web1]# yum install httpd-tools -y
    
    #首次创建文件使用-c选项
    [root@nginx01 web1]# htpasswd -c -b /etc/nginx/.nginxuser user1 123456
    Adding password for user user1
    
    [root@nginx01 web1]# htpasswd -b /etc/nginx/.nginxuser user2 123456
    Adding password for user user2
    
    [root@nginx01 web1]# cat /etc/nginx/.nginxuser
    user1:$apr1$xTEjRg/g$6IbW.lOB0Y2vXGjpB9zL70
    user2:$apr1$Ukqm8pEa$2VgnSmA0sfkxdkuyusTxr.
    
    #5.客户端测试:
    #不输入用户密码会返回401
    [root@xuzhichao ~]# curl http://www.nginx01.com/admin
    <html>
    <head><title>401 Authorization Required</title></head>
    <body>
    <center><h1>401 Authorization Required</h1></center>
    <hr><center>nginx/1.20.1</center>
    </body>
    </html>
    
    #输入用户名密码可以正常访问
    [root@xuzhichao ~]# curl --user user1:123456 http://www.nginx01.com/admin/
    admin area
    

    客户端web测试:

image

posted @ 2021-06-19 23:27  向往自由的独行者  阅读(162)  评论(0编辑  收藏  举报