新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > IT百科 > 站长技术 > 服务器

利用nginx做流量限制及集群部署

时间:2019-09-06 11:28:41  来源:  作者:

前段时间公司有个应用做什么营销活动,不知道咋回事,一个平常之后1-2万人在线的应用,突然来了10多万人,然后呢,系统就异常的慢,异常的慢,持续了很长时间,被客户投诉的很惨。就说负责该应用的项目组,几乎取消了当年的奖金。好惨。。。

于是乎,领导就以史为鉴,让我等研究下,怎么才能在这种异常的流量中保证应用不死,我第一个想到的就是,应用不可能突然多出来很多服务能力,那就只有把多出来的流量拦掉呗,应用本身的机制很难做到对整个集群的管理,只能借助Nginx了。

研究了一下nginx的功能,发现对流量的限制本身就是nginx的功能之一,然后动手测试了一下,果然是可行的。

下载一个nginx(不要问我在哪下。。。),然后打开他的配置文件。

#定义每个IP的session空间大小,只能用在http段
limit_conn_zone $binary_remote_addr zone=one:20m;

实际上它的语法是

limit_conn_zone key zone=name:size; 
#key => $binary_remote_addr #二进制的IP地址
#key可以说是一个规则,就是对客服端连接的一个标识,比如上面用的是IP地址
#zone主要用于保存每个key对应的连接数
#name => addr #随便取的一个名字,比如,你可以取成abc
#size => 20m #空间大小,这里是20兆,当这个定义的空间被耗尽的时候,nginx会返回503报错
#大家可以自己算一下,20m的空间可以保存多少个key

#与limit_conn_zone类似,定义每个允许发起的请求速率

 limit_req_zone $binary_remote_addr zone=req_one:20m rate=1r/s; 

#定义每个IP发起的并发连接数,为了测试方便可以先改为1

 limit_conn one 10;

#缓存还没来得及处理的请求,为了测试方便可以先改为1

 limit_req zone=req_one burst=100;

开启Nginx的限流功能,主要是通过前四个参数实现

http {
 limit_conn_zone $binary_remote_addr zone=one:20m;
 limit_req_zone $binary_remote_addr zone=req_one:20m rate=1r/s; 
 limit_conn one 1;
 limit_req zone=req_one burst=1;
 #rewrite_log on;
 #error_log /var/log/nginxrewrite.log notice;
 client_body_buffer_size 256M;
 include mime.types;
 default_type Application/octet-stream;
 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
 '$status $body_bytes_sent "$http_referer" '
 '"$http_user_agent" "$http_x_forwarded_for" "$request_filename"';
 sendfile on;
 keepalive_timeout 65;
 include servers/*.conf;
}

做完这些,启动nginx,简单些一个http客户端来测试一下,如果同时发起两个请求。会提示503错误。

但是干完了这个,感觉单实例下的nginx总是不能让人安心的,即使nginx不会出现故障,也不能排除其所在的服务器不会出现故障吧。

所以准备研究一下nginx怎么集群部署,但是查阅相关资料显示nginx本身不具备集群功能,因为它本身就是为了给集群做负载均衡而实现的,真的要做,可以通过几种方式。

1、利用DNS服务器负载均衡策略。及所以通过一个域名过来的请求,会先到dns服务器,然后dns再通过轮训或者最小连接数等策略,分发至nginx服务器。这样理论上只需要一个公网dns,一个公网ip,nginx服务可以部署在内网ip上。

利用nginx做流量限制及集群部署

大概是这样吧

2、nginx+nginx。就是在前端部署一个nginx,在这个nginx上再负载均衡多个nginx,但是我严重怀疑这种方案的科学性,毕竟怎么保证最前面的nginx不死,又是一个问题。

利用nginx做流量限制及集群部署

感觉好傻

3、负载均衡硬件在前,nginx在后。这就是传统的负载均衡模式,通过F5的分发,减轻服务压力。

利用nginx做流量限制及集群部署

一般够用了

非常奇怪,为什么nginx为什么本身不具备集群功能,经查阅相关资料显示,单个nginx的负载在5w左右,这对于大部分应用应该是足够的,实在不行就在前面搭dns或者用F5,足以解决大部分问题,我司的核心应用并发也才达到10w级别。如果达到阿里巴巴那种程度的话,可以参考阿里的解决方案,前端在请求时,已经拿到了一个ip列表,从前端已经开始分发了,而不是全部送到后端再进行分发。

至此,这个问题应该可以向领导交差了。



Tags:nginx   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
Nginx配置同一个域名http与https两种方式都可访问,证书是阿里云上免费申请的server{listen 80;listen 443 ssl;ssl on;server_name 域名;index index.html index.htm index....【详细内容】
2019-12-27   nginx  点击:(2)  评论:(0)  加入收藏
背景在日常运维工作中,常常会用到反向代理,为了更安全同时为了负载均衡,分担压力。那么,有小伙伴就会有疑问: 什么是反向代理? 负载均衡又是怎么实现的? 有反向代理那有正向代理吗? ...【详细内容】
2019-12-27   nginx  点击:(0)  评论:(0)  加入收藏
第一步:安装vsftpd提供ftp服务  https://www.cnblogs.com/lyq159/p/12070791.html第二步:安装Nginx提供http服务  1.安装准备:安装Nginx环境    a)gcc      安装...【详细内容】
2019-12-26   nginx  点击:(1)  评论:(0)  加入收藏
Nginx动静分离介绍Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术针对PHP的动静分离静态页面交给Nginx处理动态页面交给PHP-FPM模块或Apache处...【详细内容】
2019-12-26   nginx  点击:(1)  评论:(0)  加入收藏
一、背景为了避免别人把未备案的域名解析到自己的服务器ip而导致服务器被断网,需要在nginx上设置禁止通过ip访问服务器,只能通过域名访问。 二、解决方法如果网站只配置了...【详细内容】
2019-12-26   nginx  点击:(6)  评论:(0)  加入收藏
一、Linux介绍:Linux操作系统是基于UNIX操作系统发展而来的一种克隆系统,它诞生于1991 年的 [Linux桌面] 10 月5 日(这是第一次正式向外公布的时间)。以后借助于Internet网络,并...【详细内容】
2019-12-25   nginx  点击:(3)  评论:(0)  加入收藏
安装ffmpeg安装过程略安装完成后,检查是否安装成功。比如我这里采用向pili推流的方式,将本地的一个mp4视频推流到七牛pili。ffmpeg -re -i /tmp/ffmpeg_test.mp4 -vcodec copy...【详细内容】
2019-12-25   nginx  点击:(4)  评论:(0)  加入收藏
下载openrestywget https://openresty.org/download/openresty-1.15.8.1.tar.gztar zxvf openresty-1.15.8.1.tar.gzcd openresty-1.15.8.1 安装openresty查看当前nginx的编...【详细内容】
2019-12-24   nginx  点击:(4)  评论:(0)  加入收藏
写在前面作为一名前端,这几年没怎么碰过后台的东西,只能干等着后台小哥去排查问题,确实有点不该。如果要聊 Nginx,现阶段有点力不从心,内容还是挺多的,不够平时用的内容倒不是很复...【详细内容】
2019-12-20   nginx  点击:(3)  评论:(0)  加入收藏
由于 nginx 的优秀性能表现,所以很多企业在 Kubernetes 中选择 Ingress Controller 的时候依然会选择基于 nginx 的 ingress-nginx,前面文章中我们更多的是介绍更加云原生配置...【详细内容】
2019-12-19   nginx  点击:(12)  评论:(0)  加入收藏
今天这篇文章主要来介绍下 Nginx 的 reload 流程。实际上在之前文章中,在更改了 nginx 配置文件时,我们都会执行 nginx -s reload 命令,我们执行这条命令的原因是希望 nginx 不...【详细内容】
2019-12-19   nginx  点击:(3)  评论:(0)  加入收藏
LinuxDeploy搭建linux服务器篇,在写到安装宝塔面板时写不下去了,虽然宝塔面板成功安装,但实际运行中一堆BUG,暂时处于卡壳状态,所以还在不断排雷中...... 所以,本来想先写内网穿透...【详细内容】
2019-12-11   nginx  点击:(15)  评论:(0)  加入收藏
一、关于Nginx的负载均衡在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。详情请查看我的另一...【详细内容】
2019-09-11   nginx  点击:(1)  评论:(0)  加入收藏
正向代理Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。 正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访...【详细内容】
2019-12-09   nginx  点击:(10)  评论:(0)  加入收藏
Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少(一个worker进程只占用10-12M内存),启动极快,高并发能力强,在互联网项目中广泛应用。什么是反向代理?反向代理(Re...【详细内容】
2019-12-09   nginx  点击:(15)  评论:(0)  加入收藏
为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源比如图片,js,css等文件,我们可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时,代理服务器...【详细内容】
2019-12-09   nginx  点击:(18)  评论:(0)  加入收藏
WordPress的伪静态规则是根据服务器环境来设置的,不同的PHP环境有不同的伪静态设置方法,常见的PHP环境有 Apache和Nginx ,以下浩子分别就这两种环境做伪静态设置。值得一提的...【详细内容】
2019-12-06   nginx  点击:(19)  评论:(0)  加入收藏
正确配置Nginx+PHP是我们在Nginx下搭建Php环境必须好好掌握的方法,网上的文件太多太杂,大多都是复制粘贴的,很多错误,经过511遇见多次测试,和网上学习,给以一个较为正确的代码,希望...【详细内容】
2019-12-05   nginx  点击:(12)  评论:(0)  加入收藏
一、前言1、使用google开发的google-perftools优化nginx的内存分配效率和速度,帮助在高并发的情况下控制内存的使用。2、TCMalloc在内存的分配上效率和速度要比malloc高得多...【详细内容】
2019-12-03   nginx  点击:(11)  评论:(0)  加入收藏
一、ngx_http_referer_module(阻挡来源非法的域名请求),配置如下:location ~.*\. (gif|jpg|png|flv|swf|rar|zip)${ valid_referers none blocked test.com *.test.com; if($v...【详细内容】
2019-11-29   nginx  点击:(14)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条