Nginx访问控制分类:
基于IP的访问控制:http_access_module
基于用户登录认证:http_auth_basic_module
基于IP的访问控制
//允许配置语法
Syntax: allow address | CIDR | unix: | all;
Default: -
Context: http, server, location, limit_except
//拒绝配置语法
Syntax: deny address | CIDR | unix: | all;
Default: -
Context: http, server, location, limit_except
//配置拒绝某一个IP, 其他全部允许
location ~ ^/hello.html {
root /usr/share/nginx/html;
index index.html;
deny 你要拒绝的IP;
allow all;
}
//只允许某一个网段访问,其它全部拒绝
location / {
root html;
index index.php index.html index.htm;
allow 192.168.56.0/24;
deny all;
}
nginx.conf配置文件中server下做如下配置:
deny或者allow多个IP可以写多个deny或者allow语句。
本机访问hello.html页面:
局限性
当客户端使用代理服务器访问web服务器资源时,web服务器使用remote_addr只能捕捉到代理服务器IP,无法捕捉真实的客户端IP,因此deny或者allow设置的IP对真实客户端IP无效。
解决办法
开启http_x_forwarded_for记录真实客户端IP地址以及代理服务器IP
如下图所示,代理服务器和web服务器都需要开启http_x_forwarded_for记录真实客户端IP。很容易看出这种方案的一个缺陷是如果代理厂商没有实现开始http_x_forwarded_for,则web服务器即使开启了http_x_forwarded_for也是无效的。
基于用户登录认证
//配置语法
Syntax: auth_basic string| off;
Default: auth_basic off;
Context: http, server, location, limit_except
//⽤用户密码记录配置⽂文件
Syntax: auth_basic_user_file file;
Default: -
Context: http, server, location, limit_except
需要安装组件:
yum install httpd-tools
创建加密文件:
htpasswd -c /usr/local/nginx/auth admin
在nginx.conf的server下做如下配置:
现在,访问hello.html页面就需要输入用户名和密码,就是刚才创建的加密文件设置的用户名和密码。