很多人用 Nginx,其实只用到它两成的东西:改改 server 块、配个反向代理、重启一下,能跑就不管了。真正出问题的时候——连接数上不去、内存悄悄涨、同一条指令在两处配置里打架、升级要整包重编——才发现自己说不清楚它内部到底怎么运转。这套 150 讲的内容,就是冲着这些「说不清楚」的地方去的。

先确认你是不是它的目标读者

如果你日常只需要在宝塔面板里点几下,那这套内容大概率用不上。但下面这些场景只要中了一条,就值得认真过一遍:

  • 线上 QPS 上不去,压测数据忽高忽低,怀疑是 worker 数、连接数或事件模型没配对;
  • 配置文件越写越长,改一处影响另一处,出问题只能靠注释法二分排查;
  • 想做灰度、限流、鉴权这类功能,第一反应是「装个 Lua 模块」,但不确定有没有更轻的办法;
  • 升级 Nginx 版本要重新编译所有第三方模块,停机窗口排得很痛苦;
  • 内存占用随运行时间缓慢上升,重启就好,但不知道为什么。

它以什么方式讲内部机制

这类内容最容易翻车的地方,是把源码结构图讲一遍就完事,听完还是不知道怎么用。这套课的切入点是「配置项和现象之间的因果链」,几个典型线索大致是这样的:

  • 进程与事件模型:master 和 worker 各自负责什么,为什么 worker 数量通常跟 CPU 核数挂钩,多进程下连接是怎么被接管的,epoll 在这里扮演什么角色。这些决定了你调 worker_connections 时心里有没有底。
  • 内存池:为什么 Nginx 在请求处理中很少频繁 malloc/free,内存池的分配和回收边界在哪。理解了这一层,才能判断某次内存上涨是正常的池化行为还是真正的泄漏。
  • 哈希表参数:像 server_name、变量表这类基于哈希的结构,bucket size 和 max size 配小了会怎样、配大了又浪费在哪,课里给的是可以照着算的思路,而不是「越大越好」。
  • 配置指令的优先级:同一条指令写在 http、server、location 三个层级,谁覆盖谁,继承规则和 rewrite 阶段的影响,冲突时以谁为准。这是排查「配置明明改了却不生效」的根子。
  • 动态模块:怎么把模块编译成 .so 在运行时按需加载,升级时不用整包重编,能省下多少停机成本。

看完你应该能回答的问题

检验有没有学进去,不看记住了多少名词,看能不能一句话答上来:

  • 线上连接被打满,你怎么判断是 worker 数不够、连接数上限太低,还是后端响应太慢把连接占住了?
  • 一条 location 里的指令没生效,你的排查顺序是什么?
  • 改哪个哈希参数会影响启动时的内存占用,改了之后怎么验证没有副作用?
  • 要加一个自定义功能,什么情况下该写动态模块,什么情况下用现有指令组合就够了?
  • 内存缓慢增长但不影响服务,你凭什么判断它可以先观察而不是立刻重启?

建议怎么用这套材料

150 讲不适合从头到尾当剧集刷。更实际的做法是:先拿自己手头一台正在跑的 Nginx,把配置导出来对着看,遇到看不懂的指令再回去找对应章节。内部机制那部分(进程、事件、内存池)建议按顺序过,它们是后面调优和排障的前提;模块应用和安全配置那部分可以按需跳读。

如果只是想应付一次面试,记住几个结论就够;但如果是要在真出故障时不再靠重启碰运气,那读完之后应该能画出从请求进来到响应出去的完整链路,并且知道链路上每一环对应哪个配置项、出问题时会表现成什么现象。这才是「缺什么补什么」的意思——先弄清楚自己缺的到底是哪一块。

极客时间付费课程 - Nginx 核心知识150讲

深入理解Nginx核心,提升运维效率

编辑点评

系统讲解Nginx内部机制,涵盖性能优化、模块应用、安全配置等方面,适合有志于提升运维技能的工程师。

⭐ 编辑推荐

极客时间付费课程,Nginx核心知识150讲,全面解析Nginx内部机制,助你成为运维高手。

课程内容涵盖:Nginx进程结构、事件驱动模型、内存池、模块应用、安全配置等。

课程亮点

• Nginx内部机制深度解析
• 性能优化与安全配置
• 模块应用实战
• 适合有志于提升运维技能的工程师

课程目录

📁 001-050
    41丨 使用动态模块来提升运维效率.mp4  [145.2 MB]
    43丨 冲突的配置指令以谁为准?.mp4  [143.2 MB]
    39丨 哈希表的max_size与bucket_size如何配置.mp4  [74.1 MB]
    36丨 内存池对性能的影响.mp4  [81.9 MB]
    08丨 编译出适合自己的 Nginx.mp4  [221.2 MB]
    22丨 Nginx的进程结构实例演示.mp4  [70.6 MB]
    32丨 同步&异步、阻塞&非阻塞之间的区别.mp4  [86.6 MB]
    10丨 Nginx 命令行及演示:重载、热部署、日志切割.mp4  [188.8 MB]
    34丨 Nginx模块的分类.mp4  [14.2 MB]
    19丨 基于 OpenResty 用 Lua 语言实现简单服务.mp4  [149.8 MB]
    20丨 Nginx的请求处理流程.mp4  [45.9 MB]
    44丨 Listen指令的用法.mp4  [63.3 MB]
    40丨 Nginx中最常用的容器:红黑树.mp4  [44.5 MB]
    06丨 Nginx 的版本发布历史.mp4  [37.6 MB]
    09丨 Nginx 配置文件的通用语法介绍.mp4  [60.4 MB]
    04丨 为什么用 Nginx:它的 5 个主要优点.mp4  [50.9 MB]
    05丨 Nginx 的四个主要组成部分.mp4  [28.8 MB]
    12丨 用 Nginx 搭建一个具备缓存功能的反向代理服务.mp4  [138.9 MB]
    47丨 如何找到处理请求的server指令块.mp4  [138.2 MB]
    21丨 Nginx的进程结构.mp4  [43.8 MB]
    02丨 Nginx 适用于哪些场景?.mp4  [33.2 MB]
    35丨 Nginx如何通过连接池处理网络请求.mp4  [154.3 MB]
    03丨 Nginx 出现的历史背景.mp4  [37.6 MB]
    30丨 epoll的优劣及原理.mp4  [50.9 MB]
    33丨 Nginx的模块究竟是什么?.mp4  [96.0 MB]
    50丨 postread阶段:获取真实客户端地址的realip模块.mp4  [159.6 MB]
    07丨 选择哪一个 Nginx 发行版本?.mp4  [42.1 MB]
    01丨 课程综述.mp4  [26.4 MB]
    37丨 所有worker进程协同工作的关键:共享内存.mp4  [74.9 MB]
    27丨 网络收发与Nginx事件间的对应关系.mp4  [71.7 MB]
    17丨 SSL 协议握手时 Nginx 的性能瓶颈在哪里?.mp4  [73.8 MB]
    14丨 从网络原理来看 SSL 安全协议.mp4  [50.4 MB]
    42丨 第三章内容介绍.mp4  [41.5 MB]
    29丨 Nginx的事件驱动模型.mp4  [38.6 MB]
    49丨 11个阶段的顺序处理.mp4  [48.9 MB]
    26丨 优雅地关闭worker进程.mp4  [60.0 MB]
    11丨 用 Nginx 搭建一个可用的静态资源 Web 服务器.mp4  [229.9 MB]
    38丨 用好共享内存的工具:Slab管理器.mp4  [163.1 MB]
    18丨 用免费 SSL 证书实现一个 HTTPS 站点.mp4  [93.0 MB]
    23丨 使用信号管理Nginx的父子进程.mp4  [59.1 MB]
    16丨 SSL 证书的公信力是如何保证的?.mp4  [80.5 MB]
    25丨 热升级的完整流程.mp4  [59.4 MB]
    48丨 详解HTTP请求的11个阶段.mp4  [104.5 MB]
    45丨 处理HTTP请求头部的流程.mp4  [134.8 MB]
    31丨Nginx的请求切换.mp4  [84.3 MB]
    13丨 用 GoAccess 实现可视化并实时监控 access 日志.mp4  [72.1 MB]
    28丨 Nginx网络事件实例演示.mp4  [62.0 MB]
    24丨 reload重载配置文件的真相.mp4  [57.1 MB]
    15丨 对称加密与非对称加密各自的应用场景.mp4  [31.2 MB]
    46丨 Nginx中的正则表达式.mp4  [96.6 MB]
📁 051-099
    95丨 上游出现失败时的容错方案.mp4  [185.6 MB]
    96丨 对上游使用SSL连接.mp4  [245.4 MB]
    57丨 access阶段:对ip做限制的access模块.mp4  [36.7 MB]
    55丨 preaccess阶段:对连接做限制的limit_conn模块.mp4  [108.6 MB]
    94丨 处理上游的响应头部.mp4  [198.5 MB]
    93丨 接收上游的响应.mp4  [138.9 MB]
    61丨 precontent阶段:按序访问资源的try_files模块.mp4  [52.9 MB]
    77丨 为复杂的业务生成新的变量:map模块.mp4  [106.5 MB]
    79丨 根据IP地址范围的匹配生成新变量:geo模块.mp4  [71.9 MB]
    69丨 HTTP过滤模块的调用流程.mp4  [85.8 MB]
    71丨 用过滤模块在http响应的前后添加内容:addition模块.mp4  [47.3 MB]
    73丨 HTTP框架提供的请求相关的变量.mp4  [134.5 MB]
    80丨 使用变量获得用户的地理位置:geoip模块.mp4  [129.6 MB]
    52丨 rewrite阶段的rewrite模块:重写URL.mp4  [114.8 MB]
    70丨 用过滤模块更改响应中的字符串:sub模块.mp4  [88.1 MB]
    59丨 access阶段:使用第三方做权限控制的auth_request模块.mp4  [76.9 MB]
    54丨 find_config阶段:找到处理请求的location指令块.mp4  [127.0 MB]
    51丨 rewrite阶段的rewrite模块:return指令.mp4  [115.9 MB]
    72丨 Nginx变量的运行原理.mp4  [114.3 MB]
    89丨 proxy模块中的proxy_pass指令.mp4  [84.3 MB]
    84丨 负载均衡哈希算法:ip_hash与hash模块.mp4  [124.4 MB]
    74丨 HTTP框架提供的其他变量.mp4  [93.5 MB]
    65丨 static模块对url不以斜杠结尾却访问目录的做法.mp4  [79.4 MB]
    86丨 最少连接算法以及如何跨worker进程生效.mp4  [52.4 MB]
    67丨 提升多个小文件性能的concat模块.mp4  [65.9 MB]
    75丨 使用变量防盗链的referer模块.mp4  [122.7 MB]
    92丨 与上游服务建立连接.mp4  [98.6 MB]
    85丨 一致性哈希算法:hash模块.mp4  [80.1 MB]
    87丨 http upstream模块提供的变量.mp4  [71.0 MB]
    76丨 使用变量实现防盗链功能实践:secure_link模块.mp4  [217.7 MB]
    90丨 根据指令修改发往上游的请求.mp4  [104.5 MB]
    56丨 preaccess阶段:对请求做限制的limit_req模块.mp4  [128.4 MB]
    58丨 access阶段:对用户名密码做限制的auth_basic模块.mp4  [84.4 MB]
    78丨 通过变量指定少量用户实现AB测试:split_client模块.mp4  [116.3 MB]
    66丨 index和autoindex模块的用法.mp4  [67.9 MB]
    53丨 rewrite阶段的rewrite模块:条件判断.mp4  [53.6 MB]
    83丨 负载均衡策略:round-robin.mp4  [155.5 MB]
    99丨 缓存的基本用法.mp4  [233.3 MB]
    64丨 static模块提供的3个变量.mp4  [59.4 MB]
    97丨 用好浏览器的缓存.mp4  [139.4 MB]
    82丨 反向代理与负载均衡原理.mp4  [95.6 MB]
    88丨 http反向代理proxy处理请求的流程.mp4  [106.7 MB]
    68丨 access日志的详细用法.mp4  [88.9 MB]
    60丨 access阶段的satisfy指令.mp4  [80.9 MB]
    91丨 接收用户请求包体的方式.mp4  [114.6 MB]
    98丨 Nginx决策浏览器过期缓存是否有效.mp4  [103.3 MB]
    63丨 content阶段:详解root和alias指令.mp4  [66.3 MB]
    62丨 实时拷贝流量:precontent阶段的mirror模块.mp4  [55.9 MB]
    81丨 对客户端使用keepalive提升连接效率.mp4  [119.6 MB]
📁 100-155
    148丨 获取、修改请求与响应的SDK.mp4  [144.4 MB]
    124丨 建立TCP连接的优化.mp4  [190.2 MB]
    149丨 工具类型的SDK.mp4  [47.0 MB]
    133丨 减少磁盘读写次数.mp4  [169.8 MB]
    146丨 如何在Nginx中嵌入Lua代码.mp4  [147.5 MB]
    115丨 stream四层反向代理处理SSL下游流量.mp4  [197.8 MB]
    127丨 慢启动与拥塞窗口.mp4  [108.8 MB]
    144丨 OpenResty概述.mp4  [130.8 MB]
    121丨 如何高效使用CPU.mp4  [167.6 MB]
    131丨 应用层协议的优化.mp4  [148.6 MB]
    120丨 性能优化方法论.mp4  [72.0 MB]
    145丨 OpenResty中的Nginx模块与Lua模块.mp4  [156.8 MB]
    139丨 Nginx的启动流程.mp4  [103.0 MB]
    100丨 对客户端请求的缓存处理流程.mp4  [97.5 MB]
    126丨 优化缓冲区与传输效率.mp4  [138.7 MB]
    129丨 减少关闭连接时的time_wait端口数量.mp4  [137.4 MB]
    104丨 uwsgi、fastcgi、scgi指令的对照表.mp4  [174.1 MB]
    130丨 lingering_close延迟关闭TCP连接.mp4  [83.6 MB]
    153丨 share.mp4  [187.6 MB]
    103丨 及时清除缓存.mp4  [84.0 MB]
    107丨 用分片提升缓存效率.mp4  [90.2 MB]
    154丨 子请求的使用方法.mp4  [115.5 MB]
    141丨 if指令是邪恶的吗?.mp4  [126.3 MB]
    114丨 限并发连接、限IP、记日志.mp4  [111.3 MB]
    122丨 多核间的负载均衡.mp4  [137.7 MB]
    111丨 grpc反向代理.mp4  [106.5 MB]
    151丨 基于协程的并发编程SDK.mp4  [153.6 MB]
    118丨 UDP反向代理.mp4  [103.0 MB]
    109丨 http2协议介绍.mp4  [109.7 MB]
    142丨 解读Nginx的核心转储文件.mp4  [155.3 MB]
    147丨 OpenResty中Lua与C代码交互的原理.mp4  [97.0 MB]
    108丨 open file cache提升系统性能.mp4  [126.9 MB]
    155丨 基于OpenResty的WAF防火墙.mp4  [31.9 MB]
    152丨 定时器及时间相关的SDK.mp4  [105.3 MB]
    117丨 stream proxy四层反向代理的用法.mp4  [206.5 MB]
    123丨 控制TCP三次握手参数.mp4  [119.3 MB]
    106丨 搭建websocket反向代理.mp4  [128.4 MB]
    113丨 proxy protocol协议与realip模块.mp4  [125.4 MB]
    128丨 TCP协议的keepalive功能.mp4  [52.1 MB]
    132丨 磁盘IO的优化.mp4  [136.6 MB]
    136丨 使用Google PerfTools分析Nginx.mp4  [142.1 MB]
    119丨 透传IP地址的3个方案.mp4  [123.0 MB]
    125丨 滑动窗口与缓冲区.mp4  [148.8 MB]
    138丨 第三方模块源码的阅读.mp4  [112.4 MB]
    116丨 stream_preread模块取出SSL关键信息.mp4  [67.8 MB]
    137丨 使用stub_status模块监控Nginx的状态.mp4  [152.1 MB]
    101丨 接收上游响应的缓存处理流程.mp4  [71.5 MB]
    143丨 通过debug日志定位问题.mp4  [175.1 MB]
    110丨 搭建http2服务并推送资源.mp4  [105.1 MB]
    150丨 同步且非阻塞的底层SDK:cosocket.mp4  [187.1 MB]
    140丨 HTTP第三方模块的初始化.mp4  [161.2 MB]
    102丨 如何减轻缓存失效时上游服务的压力.mp4  [127.5 MB]
    105丨 memcached反向代理的用法.mp4  [107.4 MB]
    135丨 用tcmalloc优化内存分配.mp4  [104.4 MB]
    134丨 零拷贝与gzip_static模块.mp4  [100.3 MB]
    112丨 stream四层反向代理的7个阶段及常用变量.mp4  [106.8 MB]

适合人群

  • Nginx运维工程师
  • Web服务器管理员
  • 有志于提升运维技能的IT从业者

学习收获

掌握Nginx内部机制
提升Web服务器性能
增强安全配置能力
成为优秀的Nginx运维工程师

祝您学习愉快!

学有所成,前程似锦!