通过查看 Nginx 的并发连接, 我们可以更清除的知道网站的负载情况下面这篇文章主要给大家介绍了关于 nginx 限速之连接数限制技巧的相关资料, 文中通过示例代码介绍的非常详细, 需要的朋友可以参考借鉴, 下面来一起看看吧
前言
我们经常会遇到这种情况, 服务器流量异常, 负载过大等等对于大流量恶意的攻击访问, 会带来带宽的浪费, 服务器压力, 影响业务, 往往考虑对同一个 ip 的连接数, 并发数进行限制 nginx 内置模块限速怎么使用就不多说了, 今天来说说连接数和单个连接数限速的事话不多说了, 来一起看看详细的介绍吧
场景:
A 公司有 100 人, A 公司只有一个公网 IP, 假设 A 公司可能有 100 个人同时在下载你的网站文件
但是, 你的连接数限制配置为:
- limit_conn_zone $binary_remote_addr zone=perip:1m;
- server {
- ---
- limit_conn perip 1;
- limit_rate 1024k;
- ---
- }
允许单个连接数, 单个连接数最大带宽为 1M
这样就会有 99 个人的请求状态为 503, 其他人如果想下载就必须人工等待 (nginx 不会通知用户说 A 用户下载完了, 该你 B 用户下载了) 这样造成的用户体验极差但是优点也很明显, 带宽很快就会降下来
可能有人就要问了, 你限制成很低的连接数是想搞事情? NO, 绝对不是前面的 100 个人同时下载网站资源的情况有多大呢? 没做过统计, 但是可能性极小并且前端页面和下载资源不共用一个域名, 所以不会影响到前端页面的访问
那都是谁在大量使用连接数呢? 分两类:
下载工具类(迅雷)
各种各样的采集程序
同时进行多个下载任务
小明快乐的在看电视, 瞥了左边频幕一眼, 握草, 带宽又满了, 来吧, 限速吧,
- limit_conn_zone $binary_remote_addr zone=perip:1m;
- server {
- ---
- limit_rate 1024k;
- ---
- }
小明做了如上限速, OK, 我告诉你们谁被限速了, 当然是浏览器下载用户, 360 浏览器的下载器都不一定能限制, 好的, 来算算速度吧
浏览器: 2014K
下载器: 1024 * 15(最大连接数) * VIP
采集器: 1024 * 连接数
所以我们得到如下结论:
带宽有限, 同个 IP 同时下载的情况很小的, 或者说是可以预知的业务, 尽量将连接数限制的小一点
反之, 别限制了就降低单个连接数带宽吧! 要知道大家谁没事会用浏览器自带下载器下载呢?
注: 本文只探讨 nginx 限速模块在不同业务下的限速
彩蛋: 偶尔发现, 将连接数限制为 1 迅雷不能高速下载了
来源: http://www.phperz.com/article/18/0313/362593.html