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页面就需要输入用户名和密码,就是刚才创建的加密文件设置的用户名和密码。


本文转载:CSDN博客