概念及认识
Nginx的优点
- 高并发、高性能兼具
- 可扩展性好
- 高可靠性
运行数年无需重启 - 热部署
可以在不停止服务的情况下升级nginx - BSD许可证
概念
进程模型
多进程模型(默认)
: 一个master进程管理多个worker进程,且通常设定worker进程数量与CPU核数相等(进程间切换代价最小)
事件模型
select/poll/epoll
Nginx如何处理请求
Nginx如何处理请求
结合多进程机制和异步机制
Nginx启动后产生一个主进程,主进程执行一系列工作后产生多个工作进程。
主进程主要进行nginx配置文件解析、数据结构初始化、模块配置注册、网络监听生成、工作进程生成和管理等工作。
工作进程用于接收和处理客户端请求,是nginx服务器提供服务的主体。
工作进程使用异步非阻塞方式(单线程),可处理多个客户端请求
Web请求处理方式
多进程方式
服务器每接受到一个客户端时,由服务器主进程生成子进程和客户端建立连接进行交互,直到连接断开,该子进程结束。
优点: 设计和实现相对简单,各子进程相互独立,不受干扰
缺点: 开销大
多线程方式
服务器每当接收到一个客户端时,由服务器主进程派生一个线程和客户端进行交互
优点: 开销小
缺点: 多个线程间内存共享,彼此相互影响,开发过程中不可避免要由开发者自己对内存进行管理,增加了出错的风险。
异步方式
同步阻塞
同步非阻塞
异步阻塞
异步非阻塞
系统命令
|
|
配置
|
|
URL重写
if
|
|
break/return
|
|
rewrite
|
|
upstream
upstream
通过upstream实现负载均衡和冗余配置
语法: upstream name {…}
调度方式
- 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
- weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况
- ip_hash(不可开启weight) 每个请求按访问ip的hash结果分配,每个访客固定访问一个后端服务器
- fair (需开启upstream_fair模块) 按响应时间分配请求,响应时间短的优先分配
- url_hash(需开启hash模块) 每个url定向到同一台服务器
设备状态
- down表示当前server暂时不参与负载
- weight默认为1,weight越大,负载的权重就越大
- max_fails:一定时间内允许请求失败的次数,默认为1。当超过该次数后,返回proxy_next_upstream模块定义的错误
- fail_timeout: 失败/超时时间,默认10秒。2个作用: 1.在该时间内max_fails次失败后,服务器不可用 2.不可用的时间
- backup: 备机,nginx不会给它转发任何请求。只有当其他节点全部无法连接的时候,nginx才会启用这个节点。 一旦有可用的节点恢复服务,该节点则不再使用,又进入后备状态。
|
|
server
用于设置组内的服务器
语法: server address [parameters];
|
|
例:
|
|
nginx全局变量
|
docker lbdemo
场景
反向代理
理解代理与反向代理
代理
反向代理
配置
|
|
负载均衡
|
|
高性能API
openresty
性能调优
开启reuse port
FAQ
1.为什么MAC通过brew安装的nginx不能自动启动,必须用sudo brew restart nginx才行
由于系统限制非root用户不能启动1024以下端口
好用的日志格式
|
|
为什么apache性能不如nginx
apache架构存在局限性,apache使用操作系统进程间切换的特性,一个进程服务一个连接,这带来两个问题,一是无法启动过多的进程,二是大量进程间切换成本很高