访问控制模块(ngx_http_access_module)
模块ngx_http_access_module允许限制某些IP地址的客户端访问。也可以通过密码来限制访问。使用satisfy指令就能同时通过IP地址和密码来限制访问。
规则按照顺序依次检测,直到匹配到第一条规则。在这个例子里,IPv4的网络中只有 10.1.1.0/16 和 192.168.1.0/24允许访问,但192.168.1.1除外, 对于IPv6的网络,只有2001:0db8::/32允许访问。在规则很多的情况下,使用 ngx_http_geo_module 模块变量更合适。
1)allow
1 2 3 |
Syntax: allow address | CIDR | unix: | all; Default:— Context:http, server, location, limit_except |
允许指定的网络地址访问。
2)deny
1 2 3 |
Syntax: deny address | CIDR | unix: | all; Default: — Context: http, server, location, limit_except |
拒绝指定的网络地址访问。
配置范例
1 2 3 4 5 6 7 |
location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; allow 2001:0db8::/32; deny all; } |
用户认证模块(ngx_http_auth_basic_module)
模块ngx_http_auth_basic_module 允许使用“HTTP基本认证”协议验证用户名和密码来限制对资源的访问。也可以通过 地址来限制访问。 使用satisfy 指令就能同时通过地址和密码来限制访问。
1)auth_basic
1 2 3 |
Syntax: auth_basic string | off; Default:auth_basic off; Context:http, server, location, limit_except |
开启使用“HTTP基本认证”协议的用户名密码验证。指定的参数被用作域,参数off可以取消继承自上一个配置等级 auth_basic 指令的影响。
2)auth_basic_user_file
1 2 3 |
Syntax: auth_basic_user_file file; Default:— Context:http, server, location, limit_except |
指定保存用户名和密码的文件,格式如下:
1 2 3 4 |
# comment name1:password1 name2:password2:comment name3:password3 |
可以看得出来Nginx对于密码没有加密,密码应该使用crypt()函数加密的。搞不懂Nginx为什么没有提供类似Apache发行包中的htpasswd命令来创建此类文件,经过加密处理的。虽然Nginx没有提供,但是我们确可以使用htpasswd命令来创建用户和密码文件。
用户创建方法如下:
1 2 3 |
[root@localhost ~]# yum install httpd [root@localhost ~]# which htpasswd /usr/bin/htpasswd |
1 2 3 4 5 6 7 8 |
[root@localhost ~]# htpasswd -c -m /etc/nginx/.htpasswd dkey #创建用户dkey,-c创建文件 New password: Re-type new password: Adding password for user dkey [root@localhost ~]# htpasswd -m /etc/nginx/.htpasswd jerry #创建用户jerry,已经有文件不需要再次创建了 New password: Re-type new password: Adding password for user jerry |
认证配置样例
1 2 3 4 |
location / { auth_basic "closed site"; auth_basic_user_file /etc/nginx/.htpasswd; } |