Nginx(发音同“engine X”)是异步框架的网页服务器,也可以用作反向代理、负载平衡器和 HTTP 缓存。该软件由伊戈尔·赛索耶夫创建并于 2004年 首次公开发布。2011年 成立同名公司以提供支持。
2019年3月11日,Nginx 公司被 F5 Networks(英语:F5 Networks)以6.7亿美元收购。
Nginx 是免费的开源软件,根据类 BSD 许可证的条款发布。一大部分 Web 服务器使用 Nginx,通常作为负载均衡器。1
Nginx 思维导图 2
编译
选择官方模块
with
without
指定运行时路径、参数
添加第三方模块
下载第三方模块
config指定模块位置
C源码定义模块
添加动态模块
指定编译连接参数
命令行
参数
-s发送信号
stop
quit
reload
reopen
测试配置
- -t,-T,-q
帮助信息
- -h,-?
版本信息
- -v,-V
指定运行参数
-g
-c
-p
运维监控
日志
类型
error日志
- debug_connection对指定连接记日志
access日志
压缩
缓存
记录日志方式
直写文件
syslog
循环写内存
stub_status
accepted
handled
requests
active
reading
writing
waiting
进程模型
通讯方式
信号
TERM, INT
QUIT
HUP
USR1
USR2
WINCH
共享内存
slab内存管理
互斥锁
进程
master
worker
cache manager
cache loader
对象容器
数组
链表
队列
红黑树
基数树
哈希表
- 桶大小向上对齐cpu cache line
内存池
request
- 随请求结束释放
connection
- 随连接断开释放
连接池
事件池
上下游共享
keepalive长连接池
模块设计
模块类型
core模块
event模块
http模块
conf模块
stream模块
mail模块
模块通用接口
init_master
init_module
init_process
init_thread
exit_thread
exit_process
exit_master
请求的处理阶段
http
POST_READ阶段
SERVER_REWRITE阶段
FIND_CONFIG阶段
REWRITE阶段
POST_REWRITE阶段
PREACCESS阶段
ACCESS阶段
POST_ACCESS阶段
PRECONTENT阶段
CONTENT阶段
LOG阶段
stream
POST_ACCEPT阶段
PREACCESS阶段
ACCESS阶段
SSL阶段
PREREAD阶段
CONTENT阶段
LOG阶段
变量
按应用场景
http模块
stream模块
按功能
框架变量
- upstream变量
模块变量
按使用方式
提供方
使用方
反向代理
http
上游
协议
http/https
fastcgi
scgi
uwsgi
websocket
spdy
grpc
memcached
redis
限速
缓存
缓存类型
响应内容缓存
- 分片
openfile缓存
浏览器缓存
缓存大小
更新淘汰方式
下游
http/https
限速
平衡上下游网速
接收请求包体
接收响应包体
stream
tcp
udp
透传客户端地址
proxy_protocol
IP地址透传
上游服务直接返回报文
负载均衡
策略
轮询
哈希
- 一致性哈希
基于第三方服务
健康检查
连接池
配置DNS服务
nginx.conf指令
类型
块指令
main
http
server
upstream
location
if
limit_except
map
geo
event
stream
server
upstream
map
geo
普通指令
脚本类
设置动作
存储值
父子指令块配置合并规则
server匹配规则
精确匹配
泛域名
正则表达式
默认server
location匹配规则
前缀字符串匹配
正则表达式匹配
参数单位
时间
空间
性能优化
内存效率
tcp
- linux pressure模式
http
CPU效率
绑定CPU
静态优先级
谨慎使用消耗CPU过大的模块
线程池
worker间负载均衡
建连接
多网卡队列
网络效率
tcp
建立连接
FastOpen
backlog
超时时间
传输
缓冲区大小
- BGP
拥塞控制
- 初始拥塞窗口
延迟批量发送
tcp_nodelay
tcp_nopush
关闭连接
keepalive释放资源
减少time_wait
超时时间
http
keepalive长连接
应用层缓冲区大小
header
body
lingering_close
超时时间
TLS/SSL
session缓存
OCSP
会话票据
算法选择
对称加密算法
- 分组模式
非对称加密算法
网卡
磁盘IO
AIO
directio
零拷贝
- sendfile
日志文件
写入缓存
压缩后写入
syslog
减少读取次数
- empty_gif模块
磁盘
openresty
指令
http
处理阶段
响应过滤
进程启动
upstream连接上游
ssl
共享内存
stream
处理阶段
进程启动
upstream连接上游
共享内存
ssl
lua模块
SDK
正则表达式
流程控制类
版本与配置
进程信息
定时器
子请求
用户请求
时间类API
多线程
coroutine
thread
shared_dict
socket
tcp
udp
response header
内容输出
常量
其他
var变量
arg参数
日志
- log
get_phase
sleep