新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  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 安装安装依赖 下载 编译安装编译时将 ssl 模块静态编译 nginx 服务架构模块化结构模块化开发 nginx 的模块化结构 nginx 的模块清单 nginx 的 web 请求处理机制...【详细内容】
2019-09-20   nginx  点击:(3)  评论:(0)  加入收藏
最近遇到了nginx疯狂抛错,access.log一天一共5W多条,但error.log中有大概9K多条,基本都是111: Connection refused,这到底是为什么呢?从日志看起我们还是先来看日志。我提取了一...【详细内容】
2019-09-19   nginx  点击:(6)  评论:(0)  加入收藏
Nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少(一个worker进程只占用10-12M内存),启动极快,高并发能力强,在互联网项目中广泛应用。...【详细内容】
2019-09-17   nginx  点击:(8)  评论:(0)  加入收藏
过滤模块的分析相关结构体ngx_chain_t 结构非常简单,是一个单向链表: typedef struct ngx_chain_s ngx_chain_t; struct ngx_chain_s { ngx_buf_t *buf; ngx_chain_t *next;...【详细内容】
2019-09-16   nginx  点击:(5)  评论:(0)  加入收藏
一、安装在Centos下,yum源不提供nginx的安装,可以通过切换yum源的方法获取安装。也可以通过直接下载安装包的方法,**以下命令均需root权限执行**:首先安装必要的库(nginx 中gzip...【详细内容】
2019-09-16   nginx  点击:(7)  评论:(0)  加入收藏
当前大多数的互联网系统都使用了服务器集群技术,集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务。 图片来自 Unsplash这些集群可以是 Web 应用服务器集...【详细内容】
2019-09-11   nginx  点击:(8)  评论:(0)  加入收藏
分布式拒绝服务攻击(DDoS)指的是通过多台机器向一个服务或者网站发送大量看似合法的数据包使其网络阻塞、资源耗尽从而不能为正常用户提供正常服务的攻击手段。随着互联网带宽...【详细内容】
2019-09-11   nginx  点击:(7)  评论:(0)  加入收藏
Nginx 的进程模型 Nginx 服务器,正常运行过程中: 多进程:一个 Master 进程、多个 Worker 进程 Master 进程:管理 Worker 进程 对外接口:接收外部的操作(信号) 对内转发:根据外部的操...【详细内容】
2019-09-06   nginx  点击:(17)  评论:(0)  加入收藏
前段时间公司有个应用做什么营销活动,不知道咋回事,一个平常之后1-2万人在线的应用,突然来了10多万人,然后呢,系统就异常的慢,异常的慢,持续了很长时间,被客户投诉的很惨。就说负责...【详细内容】
2019-09-06   nginx  点击:(13)  评论:(0)  加入收藏
一、真假难辨如何禁止访问,我们先了解下常见的3种网站访问模式:用户直接访问对外服务的普通网站浏览器 --> DNS解析 --> WEB数据处理 --> 数据吐到浏览器渲染展示用户访问使...【详细内容】
2019-09-06   nginx  点击:(21)  评论:(0)  加入收藏
1.为什么nginx里面有的是浏览器渲染出的页面,有的时候就变成下载文件?这个一个取决于服务端nginx,一个取决于你浏览器。在Nginx服务端的配置文件目录下,有一个mime.types文件,内...【详细内容】
2019-09-05   nginx  点击:(17)  评论:(0)  加入收藏
概述当出现403跨域错误的时候 No 'Access-Control-Allow-Origin' header is present on the requested resource,需要给Nginx服务器配置响应的header参数,下面一起来...【详细内容】
2019-09-02   nginx  点击:(15)  评论:(0)  加入收藏
客户反映:说自己的网站走nginx代理后,打开空白。直接IP加地址访问是好的(http://ip:port)故障排查:1、打开chrome浏览器,访问了下,访问情况真是客户描述的那样。2、感觉打开chrom...【详细内容】
2019-08-28   nginx  点击:(21)  评论:(0)  加入收藏
Redis的相关知识,我们已经讲得差不多了,后面我们会开新的系列内容,来谈一谈Nginx。Nginx相信大家并不陌生,作为一款世界上最流行的HTTP与反向代理服务,在互联网领域被广泛的应...【详细内容】
2019-08-28   nginx  点击:(22)  评论:(0)  加入收藏
1. 前言本文主要讲解CentOS7如何安装PHP7最新版。CentOS 7附带PHP版本5.4,已经正式EOL(EOL是End-of-life项目终止/停产的缩写)很长一段时间,不再受支持。通过使用PHP 7,您的应...【详细内容】
2019-08-27   nginx  点击:(36)  评论:(0)  加入收藏
根目录和索引文件root 指令指定将用于搜索文件的根目录。 为了获取所请求文件的路径,NGINX 将请求 URI 附加到 root 指令指定的路径。该指令可以放在 http {},server {} 或 l...【详细内容】
2019-08-26   nginx  点击:(26)  评论:(0)  加入收藏
一、虚拟机准备:[root@localhost 桌面]# vi /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0TYPE=EthernetONBOOT=yesBOOTPROTO=staticIPADDR=192.168.59.1 #注意虚拟...【详细内容】
2019-08-26   nginx  点击:(23)  评论:(0)  加入收藏
强缓存与协商缓存的区别强缓存:浏览器不与服务端协商直接取浏览器缓存协商缓存:浏览器会先向服务器确认资源的有效性后才决定是从缓存中取资源还是重新获取资源协商缓存运作...【详细内容】
2019-08-26   nginx  点击:(18)  评论:(0)  加入收藏
Nginx怎么做域名解析?怎么在你自己开发的模块里面使用Nginx提供的方法解析域名?它内部实现是什么样的?本文以Nginx 1.5.1为例,从nginx_mail_smtp模块如何进行域名解析出发,分析Ng...【详细内容】
2019-08-26   nginx  点击:(20)  评论:(0)  加入收藏
一、安装编译工具及库文件yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel二、首先要安装 PCREPCRE 作用是让 Nginx 支持 Rewrite 功能。1、下...【详细内容】
2019-08-22   nginx  点击:(23)  评论:(0)  加入收藏
推荐资讯
相关文章
栏目更新
栏目热门