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;
}
}
技术是没有终点的,也是学不完的,最重要的是活着、不秃。 学习看书还是看视频,都不重要,重要的是学会,欢迎关注,我们的目标---不秃。
---更多运维开发交流及软件包免费获取请加V: Linuxlaowang