Nignx简介&原理&部署

1 篇文章 0 订阅
1 篇文章 0 订阅

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请求

  • 不同点:比如,读取请求头后,就开始处理请求
  • 处理过程:多阶段执行
    1. 开始:ngx_http_init_request
    2. 处理请求行:ngx_http_process_request_line
    3. 处理请求头:ngx_http_process_request_headers
    4. 开始处理请求:ngx_http_process_request
    5. 处理读写事件:ngx_http_request_handler,分发读/写函数
    6. 处理完整请求:ngx_http_handler
    7. 产生所需数据:ngx_http_core_run_phases
    8. 输出响应数据: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部署

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值