Nginx学习笔记(二)
来源:互联网 发布:沉香有助于睡眠吗 知乎 编辑:程序博客网 时间:2024/06/05 15:20
Connection:
在Nginx中,connection就是对TCP连接的封装,其中包括连接的socket,读写事件。
Nginx处理连接流程:
1. 解析配置文件,得到需要监听的端口和IP地址;
2. 在 master 中初始化监听 socket -> bind ->listen;
3. fork 多个子进程,子进程会通过竞争accept_mutex 锁获得新连接;
4. 当 client 与 server 三次握手后,nginx 某一个 worker 会 accept 成功,然后创建 nginx 对连接的封装,即ngx_connection_t 结构体;
5. 设置读写事件处理函数并添加读写事件来与客户端进行数据的交换;
6. 最后 nginx 或客户端来主动关掉连接,一个连接到此结束。
Nginx通过设置 worker_connections来设置每个进程支持的最大连接数;
实现是通过一个连接池管理的,每个worker进程都有一个独立的连接池,连接池大小为 worker_connections;
连接池实际上是一个 worker_connections 大小的一个 ngx_connection_t 结构的数组;
并且 nginx 会通过一个链表 free_connections 来保存所有空闲的 ngx_connections_t ;
每获取一个连接,就从空闲连接链表中获取一个,用完后再放回空闲连接链表中;
* Nginx 能建立的最大连接数(最大并发量): worker_connections * worker_processes
* 反向代理则是该值的1/2,因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。
负载均衡:
通过 ngx_accept_disabled 变量控制是否去竞争 accept_mutex;
*使各 worker 连接数量达到负载均衡
ngx_accept_disabled = 单进程所有连接数 1/8 - 剩余空闲连接数
当剩余连接数小于总连接数 1/8,不再获取 accept_mutex,并且 ngx_accept_disabled 减1,直到小于0。
* 当 disabled 越大,让出机会越大(类似Lottery算法)
ngx_accept_disabled = ngx_cycle->connection_n / 8 - ngx_cycle->free_connection_n;if (ngx_accept_disabled > 0) { ngx_accept_disabled--;} else { if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) { return; } if (ngx_accept_mutex_held) { flags |= NGX_POST_EVENTS; } else { if (timer == NGX_TIMER_INFINITE || timer > ngx_accept_mutex_delay) { timer = ngx_accept_mutex_delay; } }}
/*************************************************************************************/
Nginx开发从入门到精通:http://tengine.taobao.org/book/
- Nginx学习笔记(二)
- Nginx学习笔记(二)—— nginx中的rewrite
- nginx学习笔记二(nginx的配置)
- nginx 学习笔记(二)nginx 配置相关
- nginx 源码学习笔记(二)
- Nginx学习笔记(二):配置文件
- nginx 学习笔记(二) --- 调试
- Nginx学习笔记二 -- nginx的配置
- nginx 学习笔记二(基本配置&优化)
- Nginx学习笔记(二) 负载均衡
- nginx 源码学习笔记(二)——nginx精粹-模块
- nginx 源码学习笔记(二)——nginx精粹-模块
- nginx 源码学习笔记(二)——nginx精粹-模块
- nginx源码学习(二)
- nginx学习笔记(一)
- Nginx学习笔记(一)
- Nginx学习笔记(一)
- Nginx学习笔记(三)
- JAVA垃圾回收算法
- 【信源编码作业四】基于LBG的矢量量化算法
- 【jzoj5215】【BZOJ4870】【Shoi2017】【GDOI2018模拟7.9】【组合数问题】【矩阵快速幂】
- 循环冗余校验-CRC
- Shell变量
- Nginx学习笔记(二)
- 深度学习笔记——Solver超参数配置文件
- 【动态规划24】bzoj3437小P的牧场(dp+斜率优化)
- 线程自定义数据
- java EE单例Singleton自启动
- CRC校验
- 《小白兔到大黑牛》第八篇结合TCP 知识写一个简单的聊天
- Python switch/case语句实现方法
- 损失函数可视化