nginx

高性能Web服务器详解(Nginx)

服务器架构

模块划分

  • 核心功能模块
  • 标准HTTP模块
  • 可选HTTP模块
  • 邮件服务模块
  • 第三方模块

事件驱动模型

  • select库:轮询所有事件描述符集合中的每一个事件描述符;
  • poll库:select为读、写、异常时间分别创建一个描述符集合,需要轮询三个集合;poll创建一个集合,在每个描述符结构上设置标志,轮询的时候同时检查;
  • epoll库:对上面的优化,时间描述符个数;轮序策略,活跃度的描述符进行操作;节省内核到用户空间的一次数据拷贝;
  • kqueue 库:是对特定BSD平台的模型,支持条件触发(水平触发,只要满足条件就发一个事件)和边缘触发(每当状态变换时,触发一个事件)。

线程类型

  • 主进程
  • 工作进程
  • Cache Loader & Cache Manager

nginx的时间管理

传统的系统需要中断、陷入内核。设计用户态和内核态的切换,开销大。gettimeofday()函数调用系统调用sys_gettimeofday(),但是在x86_64体系中,该系统调用使用vsyscall获取内核信息,避免中断。从而会提高效率。

nginx的内存管理

nginx的工作进程

配置

杂记

概念篇

  • 惊群:当一个网络连接过来的时候,多个线程会被唤醒,但是最终只有一个线程接受请求,所以其他线程的唤醒操作都是浪费的。为避免线程对连接的争抢,

    1
    accept_mutext on | off // defualt is on
  • 正向代理、反向代理:正向代理,我们的角色是客户端,目的是要访问外网的资源;在反向代理服务器中,我们的角色是站点,目的吧站点的资源发布出去让其他客户端能够访问。