【Nginx】用户访问控制与认证模块ngx_http_access_module、ngx_http_auth_basic_module
一、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 #指定用户信息文件的路径及用户名密码
4、创建好了后修改nginx.conf文件引用模块,并指定文件路径,也就是上一步时创建的路径,然后访问location指定的路径时就会弹出窗口需要用户名密码才可以登录了
5、设置后的效果如下:
评论