Nginx实用插件
Posted 踩踩踩从踩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx实用插件相关的知识,希望对你有一定的参考价值。
前言
本篇文章会从一些nginx上实用的插件进行介绍,以及应对后端服务出现故障处理、高并发限流、黑白名单插件、Nginx第三方插件的应用。这里包括爬虫限流、以及恶意请求,这些常见的场景下的处理。
代理服务故障处理
当请求过来,有一台服务器可能挂掉,然后nginx可能挂掉。以及 请求有一千五百万,但是所有服务器处理性能不够。以及出现故障时,主动健康检查支持不够,nginx;
被动健康检查
upstream backend {
server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=10s;
server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=10s;
}
主动健康检查
upstream cluster {
# simple round-robin
server 127.0.0.1:8080;
server 127.0.0.1:8081;
check interval=5000 rise=1 fall=3 timeout=4000;
#check_http_send "HEAD / HTTP/1.0\\r\\n\\r\\n";
#check_http_expect_alive http_2xx http_3xx;
}
上面有安装插件的方法。
故障转移
dubbo中会调几次,服务转移 熔断器等。 遇到故障定义下一个服务器上。
一旦有这个超时配置过后,就会移到下一个服务器上。
应对服务雪崩
动态更新上游服务
高并发限流
本来网络请求有很大的不确定因素,有可能突然请求达到了几百万的同时请求。
像这些,我们不能拿到应用程序中去限制。tomcat压力就非常大了。
限制请求
模块ngx_http_limit_req_module (nginx.org)
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_req_zone $server_name zone=preserver:10m rate=10r/s;
server {
location /search/ {
limit_req zone=one burst=5;
limit_req zone=perserver burst=10;
}
}
}
burst 表示突发请求。
zone 每秒请求。
限制连接
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn_zone $server_name zone = perserver:10m;
server {
location /download/ {
limit_conn addr 1;
limit_conn perserver 100;
}
}
}
限制给客户端的响应速率
http核心模块中对响应速率限制提供了支持,视频网站,不可能将所有带宽都给一个请求,我们需要限制每个请求的速率
http {
server {
location /download/ {
limit_rate_after 500k;
limit_rate 50k;
} } }
针对爬虫限速
robots.txt 写法:
User-agent: * 这里的*代表的所有的搜索引擎种类,*是一个通配符
Allow: /cgi-bin/ 这里定义是允许爬寻cgi-bin目录下面的目录
Disallow: /admin/ 这里定义是禁止爬寻 admin 目录下面的内容
Disallow: /require/ 这里定义是禁止爬寻 require 目录下面的内容
这些都是限制爬虫,限制其访问敏感数据。
Disallow: /data/www/images
针对爬虫限速-Nginx配置
所以我们在爬虫时,需要创建一个ip线程池,才能批量设置,并且对于单ip 一定要 对curl、apachebench、spider、bot、slurp 这些关键字做匹配
限制客户端上传速率
Syntax: limit_upload_rate rate;
Default: limit_upload_rate 0;
Context: http, server, location, if in location
Syntax: limit_upload_rate_after size;
Default: limit_upload_rate_after 0;
Context: http, server, location, if in location
黑白名单插件
用来限制访问模块请求的。
Nginx的访问模块
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_white_black_list 通过配置文件来指定黑白名单内容。
功能描述: 处在黑名单中的 ip 与网络,将无法访问 web 服务。 处在白名单中的 ip,访问 web 服务时,将不受 nginx 所有安全模块的限制。 支持动态黑名单(需要与 ngx_http_limit_req 配合),需要修改nginx代码这里就不提及了。如有需要,参考给到的ngx_white_black_list链接
nginx配置文件内容
# 简单指令以;结尾
worker_processes 4;
worker_rlimit_nofile 65535;
# 大括号属于块指令
events {
worker_connections 1024;
}
http {
# 定义 黑名单或白名单文件 空间key
# 只能在http指令块中
# white_black_list_conf可以配置多个 只需 zone=value 其中的value不同就可
white_black_list_conf conf/white.list zone=white:2m;
white_black_list_conf conf/black.list zone=black:4m;
# 启用黑白名单,on/off,启用/关闭。
# 在http、server、location下使用, 功能默认是关闭
# 配置在对应的指令块中,对应的指令块上下文生效
white_list white on; #白名单 white 在整个http{}中都开启
black_list black on; #黑名单 black 在整个http{}中都开启
server {
listen 80;
root /data/www/;
# 黑白名单配置调整接口,通过它可以调整配置内容
location /sec_config {
sec_config on;
}
}
}
主要还是根据官方文档,进行查找插件。
第三方插件
这在官方网站上有大量的操作插件。
以上是关于Nginx实用插件的主要内容,如果未能解决你的问题,请参考以下文章