Nginx简介&原理&部署
一·Nginx简介
1.Nginx是什么
- Nginx (engine x) 是一个轻量级/高性能/易部署/易维护的Web服务器。
- 同时是反向代理服务器、电子邮件(IMAP/POP3/SMTP)代理服务器
- 其特点是占有内存少,并发能力强。
- 国内生产使用:百度、京东、新浪、网易、腾讯、淘宝等。
- 连接测试:24G内存的机器上,处理的并发请求数达到过200万
2.Nginx产生
- 采用C语言进行编写,选择 epoll and kqueue作为开发模型
- 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的
- 第一个公开版本0.1.0发布于2004年10月4日。
3.Nginx作用
- C10K:解决了服务器的C10K问题(一秒之内连接客户端的数目为10k)
4.Nginx特点
- 兼容:可在大多数Unix Linux OS上编译运行,并有Windows移植版。
- 简便:灵活简单的配置,易上手,方便部署,网上有大量成熟文档。
- 独立:独有函数库,仅使用系统C库。无需考虑潜在的授权冲突。
- 场景:可用作反向代理服务器,实现负载均衡,常见应用场景。
- 机制:异步事件驱动处理请求(传统服务器采用多线程)。
- 性能:能够支持高达 50,000 个并发连接数的响应,生产有2~3万。
- 低耗:10,000 非活动的 HTTP keep-alive 连接仅需 2.5M内存。
- 维护:支持热更新,不中断程序进行升级,稳定性高。
5.服务器类型(扩展)
- 按外形:塔式服务器、机架服务器、刀片式服务器、高密度服务器。
- 按CPU数量:单路服务器、双路服务器、多路服务器。
- 按指令集:RISC(非X86架构,如Unix)和CISC(典型代表为X86架构)
- 按应用功能:数据库/应用程序/ftp/代理/缓存/Web服务器等。
6.Nginx主要功能
- 反向代理:转发请求给内部服务器,将结果返回给客户端。
- 负载均衡:将大量请求分摊不同服务器,高并发场景下使用。
- 动静分离:分离动态请求和静态请求区分转发(本身是静态服务器)。
二·Nginx原理
1.Nginx架构
架构是什么
- 进程:主流、默认采用多进程在后台运行,支持多线程
- 架构:一个master进程和多个worker进程
架构示意图
各个的作用
- master:管理worker进程。
- 接收外界的信号
- 向各worker发送信号
- 监控worker状态,worker异常会启动新的worker
- worker:基本的网络事件,采用异步非阻塞机制
- 多个worker之间是对等、独立的,同等竞争客户端请求。
- 一个请求只有一个worker处理,不能处理其它worker请求。
- worker个数可配置,通常与机器CPU核数一致。
2.Nginx高效处理请求
1.传统http请求
- http请求:一个[请求-响应]过程
- 处理过程:顺序执行
- 分析请求:读取请求行>>>读取请求头>>>读取请求体>>>得到数据
- 构建响应:处理请求>>>构建响应行、响应头、响应体
2.Nginx请求
- 不同点:比如,读取请求头后,就开始处理请求
- 处理过程:多阶段执行
- 开始:ngx_http_init_request
- 处理请求行:ngx_http_process_request_line
- 处理请求头:ngx_http_process_request_headers
- 开始处理请求:ngx_http_process_request
- 处理读写事件:ngx_http_request_handler,分发读/写函数
- 处理完整请求:ngx_http_handler
- 产生所需数据:ngx_http_core_run_phases
- 输出响应数据:ngx_http_write_filter
- 高效原因:不同阶段有各种优化如状态机、链表、hash表、buffer等
3.Nginx请求示意图
3.正向代理&反向代理
1.代理是客户端与服务端的访问跳板
- 对于客户端代理充当服务端角色
- 对于服务端代理充当客户端角色
2.正向代理:客户端主动设置的代理
- 前提:客户端配置,与客户端处于同一LAN网络中
- 跨网:可以访问原本不能访问的服务器
- 隐藏:可以伪装、隐藏原始客户端地址
- 使用:配置正向代理的IP、端口即可
- 缺点:信息暴露隐患,数据传输通过第三方
3.反向代理:服务端主动设置的代理
- 前提:服务端配置,与服务端处于同一LAN网络中
- 分发:将客户端请求进行服务器(或集群)内部分发
- 负载均衡:将高并发的请求进行服务器分摊
- 使用:Nginx被广泛使用,Apache性能略差
- 缺点:虽然文档成熟,深层原理上有一定学习成本、门槛
4.代理示意图
4.负载均衡
1.负载均衡是什么
- 高并发场景下,依赖反向代理,将请求分摊到不同服务器完成响应。
2.Nginx的策略
- 内置策略:轮询(默认)、权重、ip_hash
- 轮询:平均分,服务器性能平均场景,默认设置
- 权重:按权重分,服务器性能不均衡场景,比如内存,核心数
- ip_hash:按ip分,解决session问题,保证ip与服务器一致
- 第三方策略:url_hash(第三方)、fair(第三方),需安装第三方模块
- url_hash:按url分,后端服务器做缓存时,保证url与服务器一致
- fair:按响应时间分,响应时间短的优先分配。
三·Nginx部署
未完待续