nginx基于来源ip和密码进行访问控制

nginx网站优化
  • 1、nginx开启目录浏览 提供下载功能
    默认情况下,网站返回index指定的主页,但如果该网站不存在主页,则将请求交给autoindex模块
如果开启autoindex模块,则提供一个下载的页面, 如果没有开启autoindex 则会报错 403
[root@web01 centos]# cat /etc/nginx/conf.d/mirror.oldxu.com.conf
server {
	listen 80;
	server_name mirror.oldxu.com;
	charset utf8;					#字符集

	location / {
		root /code;
		index index.html;
		autoindex on;				#开启目录索引,提供下载
		autoindex_exact_size off;	#以人性化方式显示大小
		autoindex_localtime on;		#与本地时间保持一致
	}
}
  • 2、nginx实现访问控制,基于来源IP控制、基于用户名密码控制
示例一.允许特定的IP访问,其他全部拒绝
10.0.0.1    可以正常访问  /centos
10.0.0.100  仅能访问      /ubuntu   /redhat   

[root@web01 ~]# cat /etc/nginx/conf.d/mirror.oldxu.com.conf 
server {
	listen 80;
	server_name mirror.oldxu.com;
	root /code;
	charset utf8;
	autoindex on;				#开启目录索引,提供下载
	autoindex_exact_size off;	#以人性化方式显示大小
	autoindex_localtime on;		#与本地时间保持一致

	location / {
		index index.html;
	}

	location /centos {
		allow 10.0.0.1/32;
		deny all;
	}
}

示例二.拒绝特定的IP访问(10.0.0.100),其他全部允许

[root@web01 ~]# cat /etc/nginx/conf.d/mirror.oldxu.com.conf 
server {
	listen 80;
	server_name mirror.oldxu.com;
	root /code;
	charset utf8;
		autoindex on;			#开启目录索引,提供下载
		autoindex_exact_size off;	#以人性化方式显示大小
		autoindex_localtime on;		#与本地时间保持一致

	location / {
		index index.html;
	}

	location /centos {
		deny 10.0.0.100/32;
		allow all;
	}
}

注意:deny和allow的顺序是有影响的
默认情况下,从第一条规则进行匹配
如果匹配成功,则不继续匹配下面的内容。
如果匹配不成功,则继续往下寻找能匹配成功的内容。

  • 3、基于用户名和密码的方式限制 ( 针对个人 ) ( 针对运维人员 )
1.安装密码生成工具
[root@web01 ~]# yum install httpd-tools -y

2.生成密码
[root@web01 ~]# htpasswd -b -c /etc/nginx/auth_conf  oldxu 123456

3.修改nginx配置文件
[root@web01 ~]# cat  /etc/nginx/conf.d/mirror.oldxu.com.conf 
server {
	listen 80;
	server_name mirror.oldxu.com;
	root /code;
	charset utf8;
		autoindex on;			#开启目录索引,提供下载
		autoindex_exact_size off;	#以人性化方式显示大小
		autoindex_localtime on;		#与本地时间保持一致

	location / {
		index index.html;
	}

	location /centos {
		auth_basic "hello test";
		auth_basic_user_file "/etc/nginx/auth_conf";
	}
}

  • 4、nginx实现限速 ( 频率、速率、连接限制 )
1.请求频率限制 Http
[root@web01 ~]# cat /etc/nginx/conf.d/mirror.oldxu.com.conf 
limit_req_zone $binary_remote_addr zone=req_od:10m rate=1r/s;

server {
	listen 80;
	server_name mirror.oldxu.com;
	root /code;
	charset utf8;
	autoindex on;				#开启目录索引,提供下载
	autoindex_exact_size off;	#以人性化方式显示大小
	autoindex_localtime on;		#与本地时间保持一致
	
	limit_req zone=req_od burst=3 nodelay;

	location / {
		index index.html;
	}

	location /centos {
		auth_basic "hello test";
		auth_basic_user_file "/etc/nginx/auth_conf";
	}
}

limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
#第一个参数:$binary_remote_addr表示通过这个标识来做限制,限制同一客户端ip地址。
#第二个参数:zone=req_one:10m表示生成一个大小为10M,名为req_one的内存区域,用来存储访问的频次信息。
#第三个参数:rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以30r/m。

limit_req zone=req_one burst=3 nodelay;
#第一个参数:zone=req_one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应。
#第二个参数:burst=3,设置一个大小为3的缓冲区,当有大量请求过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。
#第三个参数:nodelay,超过访问频次并且缓冲区也满了的时候,则会返回503,如果没有设置,则所有请求会等待排队。



2.连接限制
[root@web01 ~]# cat /etc/nginx/conf.d/mirror.oldxu.com.conf 
limit_conn_zone $binary_remote_addr zone=conn_od:10m;

server {
	listen 80;
	server_name mirror.oldxu.com;
	root /code;
	charset utf8;
	autoindex on;			#开启目录索引,提供下载
	autoindex_exact_size off;	#以人性化方式显示大小
	autoindex_localtime on;		#与本地时间保持一致
	limit_conn conn_od 2;

	location / {
		index index.html;
	}

	location /centos {
		auth_basic "hello test";
		auth_basic_user_file "/etc/nginx/auth_conf";
	}
}


3.速率限制
[root@web01 ~]# cat /etc/nginx/conf.d/mirror.oldxu.com.conf 
limit_conn_zone $binary_remote_addr zone=conn_od:10m;

server {
	listen 80;
	server_name mirror.oldxu.com;
	root /code;
	charset utf8;
		autoindex on;				#开启目录索引,提供下载
		autoindex_exact_size off;	#以人性化方式显示大小
		autoindex_localtime on;		#与本地时间保持一致
	limit_conn conn_od 2;
	limit_rate_after 100m;
	limit_rate 100k;

	location / {
		index index.html;
	}

	location /centos {
		auth_basic "hello test";
		auth_basic_user_file "/etc/nginx/auth_conf";
	}
}

综合案例实现

综合案例、限制web服务器请求数处理为1秒一个,触发值为5、限制并发连接数为1、限制下载速度为100k,如果超过下载次数,则返回提示 "请充值会员"

[root@web01 conf.d]# cat mirror.oldxu.com.conf 
limit_req_zone  $binary_remote_addr zone=req_od:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=conn_od:10m;

server {
	listen 80;
	server_name mirror.oldxu.com;
	root /code;
	charset utf8;
	autoindex on;
	autoindex_exact_size off;
	autoindex_localtime on;
	limit_req zone=req_od burst=5 nodelay;
	limit_conn conn_od 1;
	limit_rate_after 100m;
	limit_rate 100k;
	
	error_page 503 @errpage;
	location @errpage {
		default_type text/html;
		return 200 ' 老王提示--->请充值会员';
	}
	location / {
		index index.html;
	}
}

posted @ 2019-11-08 19:58  老王教你学Linux  阅读(267)  评论(0编辑  收藏  举报