【Nginx】用户访问控制与认证模块ngx_http_access_module、ngx_http_auth_basic_module

TangLu 未命名 2018-09-18 5560 0

一、Nginx访问控制模块——ngx_http_access_module

通过该模块可以控制来访用户地址(实现限制访问IP)和允许访问的目录,该模块默认安装,除非在编译时加上了--without-http_access_module。在配置了多条访问规则后将按照从上往下的顺序进行匹配,只要遇到符合条件的规则就不再继续往下。在实际配置中可以按照想禁止哪个IP访问就deny掉对应的IP,想允许则加上allow ip,想禁止或者允许所有的IP访问就使用allow all或者deny all

#禁止192.168.1.120这个IP的访问,然后允许了另外2个网段的IP访问,最后不符合匹配条件的IP全部禁止访问
location / {
deny  192.168.1.120;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
deny  all;
}


二、Nginx用户认证模块——ngx_http_auth_basic_module

1、Nginx进行用户名密码验证的话是通过ngx_http_auth_basic_module模块实现,该模块可作用范围http,server,location,limit_except。http_auth_basic_module有一个局限性就是用户信息依赖于文件,如果想避免这个问题的话就需要考虑Nginx与LUA结合实现高效验证;或者利用nginx_auth_ldap模块实现与LDAP结合

location / {
    auth_basic           "Please input your name";
    auth_basic_user_file /etc/nginx/htpasswd;
}


2、由于认证文件需要通过htpasswd命令,所以需要先安装httpd-tools这个工具

#ubuntu
apt-get install apache2-utils

#centos
yum install httpd-tools


3、使用htpasswd命令进行用户信息创建,htpasswd常用选项如下

-c:创建一个加密文件,第一次执行命令时需要加-c选项

-n:不更新加密文件,只将加密后的用户名密码显示在屏幕上

-m:默认采用MD5算法对密码进行加密

-d:采用CRYPT算法对密码进行加加密

-p:不对密码进行进行加密,即明文密码

-s:采用SHA算法对密码进行加密

-b:在命令行中一并输入用户名和密码而不是根据提示输入密码

-D:删除指定的用户

htpasswd -c -m /etc/nginx/htpasswd secgpt  #指定用户信息文件的路径及用户名密码

nginxbasic2.jpg


4、创建好了后修改nginx.conf文件引用模块,并指定文件路径,也就是上一步时创建的路径,然后访问location指定的路径时就会弹出窗口需要用户名密码才可以登录了

nginxbasic1.jpg


5、设置后的效果如下:

nginxbasicautu.png



评论