nginx相关概念
nginx概念:
影响用户体验的因素:
- 客户端硬件配置
- 客户端网络速率
- 客户端与服务端距离
- 服务端网络速率
- 服务端硬件配置
- 服务端架构设计
- 服务端应用程序工作模式
- 服务端并发数量
- 服务端响应文件大小及数量
- 服务端I/O压力
nginx的功能:
- 静态的web资源服务器(图片、js、css、html、txt等金泰资源服务器)
- 结合fastcgi、uwsgi、scgi等协议反代动态资源请求
- http/https协议的反向代理
- imap4/pop3协议的反向代理
- tcp/udp协议的请求转发
- 重新配置和在线升级而无须中断客户的工作进程
- 基于IP及用户的访问控制
- 访问日志(支持基于日志缓冲提高其性能
- 支持 keep-alive 和管道连接(利用一个连接做多次请求)
- 支持访问速率限制及并发数限制
基础特性
- 模块化设计
- 支持热部署:不停机更新配置文件,升级版本,更换日志文件
- 低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存
- 支持event-driven(select、poll、epoll),aio,mmap,sendfile
优点:
- 高并发连接,官方测试可支持5W并发连接,在世纪生成环境能跑到2~3w并发
- 内存消耗少。3w并发下,开启的10个nginx进程才消耗150M内存
- 配置文件简单
- 成本低。开源软件可免费使用,不需购买硬件负载均衡器
- 支持rewrite重写规则,能够根据域名、url的不同,将http请求分到不同的后端服务群组
- 内置的健康检查功能,如果nginx proxy后端的某web宕机,不会影响前端访问
- 节省带宽。支持gzip压缩,可以添加浏览器本地缓存的header头
- 稳定性高,用于反向代理,宕机的概率微乎其微
- 模块化设计,可动态编译
- 文当全、二次开发和模块多
- 支持热部署,可不停机重载配置文件
- 支持事件驱动、AIO、mmqp等性能优化
nginx进程结构:
web请求处理机制:
多进程方式: nginx使用
- 服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求
多线程方式: apache的work模式
- 与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程来个客户方进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作了,IIS服务器使用了多线程的方式,需要间隔一段时间就重启一次才能稳定
nginx工作原理
ngin服务的HTTP连接建立和请求处理过程:
- Nginx启动时,Master 进程,加载配置文件
- Master进程,初始化监听的 socket
- Master进程,fork 出多个 Worker 进程
- Worker进程竞争新的连接,获胜方通过三次握手,建立 Socket 连接,并处理请求

一个master进程作用:
- 接收外部的操作(信号)
- 根据外部的操作的不同,通过信号管理 Worker
- 监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程
- 读取Nginx 配置文件并验证其有效性和正确性
- 建立、绑定和关闭socket连接
- 按照配置生成、管理和结束工作进程
- 接受外界指令,比如重启、升级及退出服务器等指令
- 不中断服务,实现平滑升级,升级成功则重启服务并应用新的配置
- 不中断服务,实现平滑升级,升级失败进行回滚处理
- 开启日志文件,获取文件描述符
- 编译和处理perl脚本
一个或多个worker进程作用:
- 所有 Worker 进程都是平等的
- 网络请求处理
- Worker进程数量:在nginx.conf中配置,一般设置为cpu核心数,充分利用CPU资源,同时,避免进程数量过多,避免进程竞争CPU资源,增加上下文切换的损耗
- 接受处理客户的请求
- 将请求依次送入各个功能模块进行处理
- I/O调用,获取响应数据
- 与后端服务器通信,接收后端服务器的处理结果
- 缓存数据,访问缓存索引,查询和调用缓存数据
- 发送请求结果,响应客户的请求
- 接收主程序指令,比如重启、升级和退出等
缓存相关的进程:
- cache loader: 载入缓存对象
- cache manager: 管理缓存对象
nginx平滑升级的原理
升级时,master创建新的worker,关闭旧worker的请求通道,等待旧worker把他自己正在处理的请求处理完,然后关闭旧worker进程

nginx 进程间通信:
- 1、用户传递信号:start、stop、reload
- 2、主进程接收用户信号
- 3、主进程(master)将信号发送到单向通信管道,传给工作进程(worker)
- 4、单向管道在内存中包含工作进程数据:指令、工作进程ID、索引、文件描述符
- 5、工作进程读取、解析管道中的指令,并进行加载

浙公网安备 33010602011771号