Nginx核心知识100讲 / 百万并发下的Nginx性能优化之道
陶辉
《深入理解Nginx》作者,智链达CTO
 
  • 课程目录
  • 课程介绍
  • 01 | 课程综述

  • 02 | Nginx适用于哪些场景?

  • 03 | Nginx出现的历史背景

  • 04 | 为什么用Nginx:它的 5 个主要优点

  • 05 | Nginx的四个主要组成部分

  • 06 | Nginx的版本发布历史

  • 07 | 选择哪一个Nginx发行版本?

  • 08 | 编译出适合自己的Nginx

  • 09 | Nginx配置文件的通用语法介绍

  • 10 | Nginx命令行及演示:重载、热部署、日志切割

  • 11 | 用Nginx搭建一个可用的静态资源Web服务器

  • 12 | 用Nginx搭建一个具备缓存功能的反向代理服务

  • 13 | 用GoAccess实现可视化并实时监控access日志

  • 14 | 从网络原理来看SSL安全协议

  • 15 | 对称加密与非对称加密各自的应用场景

  • 16 | SSL证书的公信力是如何保证的?

  • 17 | SSL协议握手时Nginx的性能瓶颈在哪里?

  • 18 | 用免费SSL证书实现一个HTTPS站点

  • 19 | 基于OpenResty用Lua语言实现简单服务

  • 20 | Nginx的请求处理流程

  • 21 | Nginx的进程结构

  • 22 | Nginx的进程结构实例演示

  • 23 | 使用信号管理Nginx的父子进程

  • 24 | reload重载配置文件的真相

  • 25 | 热升级的完整流程

  • 26 | 优雅地关闭worker进程

  • 27 | 网络收发与Nginx事件间的对应关系

  • 28 | Nginx网络事件实例演示

  • 29 | Nginx的事件驱动模型

  • 30 | epoll的优劣及原理

  • 31 | Nginx的请求切换

  • 32 | 同步&异步、阻塞&非阻塞之间的区别

  • 33 | Nginx的模块究竟是什么?

  • 34 | Nginx模块的分类

  • 35 | Nginx如何通过连接池处理网络请求

  • 36 | 内存池对性能的影响

  • 37 | 所有worker进程协同工作的关键:共享内存

  • 38 | 用好共享内存的工具:Slab管理器

  • 39 | 哈希表的max_size与bucket_size如何配置

  • 40 | Nginx中最常用的容器:红黑树

  • 41 | 使用动态模块来提升运维效率

  • 42 | 第三章内容介绍

  • 43 | 冲突的配置指令以谁为准?

  • 44 | Listen指令的用法

  • 45 | 处理HTTP请求头部的流程

  • 46 | Nginx中的正则表达式

  • 47 | 如何找到处理请求的server指令块

  • 48 | 详解HTTP请求的11个阶段

  • 49 | 11个阶段的顺序处理

  • 50 | postread阶段:获取真实客户端地址的realip模块

  • 51 | rewrite阶段的rewrite模块:return指令

  • 52 | rewrite阶段的rewrite模块:重写URL

  • 53 | rewrite阶段的rewrite模块:条件判断

  • 54 | find_config阶段:找到处理请求的location指令块

  • 55 | preaccess阶段:对连接做限制的limit_conn模块

  • 56 | preaccess阶段:对请求做限制的limit_req模块

  • 57 | access阶段:对ip做限制的access模块

  • 58 | access阶段:对用户名密码做限制的auth_basic模块

  • 59 | access阶段:使用第三方做权限控制的auth_request模块

  • 60 | access阶段的satisfy指令

  • 61 | precontent阶段:按序访问资源的try_files模块

  • 62 | 实时拷贝流量:precontent阶段的mirror模块

  • 63 | content阶段:详解root和alias指令

  • 64 | static模块提供的3个变量

  • 65 | static模块对url不以斜杠结尾却访问目录的做法

  • 66 | index和autoindex模块的用法

  • 67 | 提升多个小文件性能的concat模块

  • 68 | access日志的详细用法

  • 69 | HTTP过滤模块的调用流程

  • 70 | 用过滤模块更改响应中的字符串:sub模块

  • 71 | 用过滤模块在http响应的前后添加内容:addition模块

  • 72 | Nginx变量的运行原理

  • 73 | HTTP框架提供的请求相关的变量

  • 74 | HTTP框架提供的其他变量

  • 75 | 使用变量防盗链的referer模块

  • 76 | 使用变量实现防盗链功能实践:secure_link模块

  • 77 | 为复杂的业务生成新的变量:map模块

  • 78 | 通过变量指定少量用户实现AB测试:split_client模块

  • 79 | 根据IP地址范围的匹配生成新变量:geo模块

  • 80 | 使用变量获得用户的地理位置:geoip模块

  • 81 | 对客户端使用keepalive提升连接效率

  • 82 | 反向代理与负载均衡原理

  • 83 | 负载均衡策略:round-robin

  • 84 | 负载均衡哈希算法:ip_hash与hash模块

  • 85 | 一致性哈希算法:hash模块

  • 86 | 最少连接算法以及如何跨worker进程生效

  • 87 | upstream模块提供的变量

  • 88 | proxy模块处理请求的流程

  • 89 | proxy模块中的proxy_pass指令

  • 90 | 根据指令修改发往上游的请求

  • 91 | 接收用户请求包体的方式

  • 92 | 与上游服务建立连接

  • 93 | 接收上游的响应

  • 94 | 处理上游的响应头部

  • 95 | 上游出现失败时的容错方案

  • 96 | 对上游使用SSL连接

  • 97 | 用好浏览器的缓存

  • 98 | Nginx决策浏览器过期缓存是否有效

  • 99 | 缓存的基本用法

  • 100 | 对客户端请求的缓存处理流程

  • 101 | 接收上游响应的缓存处理流程

  • 102 | 如何减轻缓存失效时上游服务的压力

  • 103 | 及时清除缓存

  • 104 | uwsgi、fastcgi、scgi指令的对照表

  • 105 | memcached反向代理的用法

  • 106 | 搭建websocket反向代理

  • 107 | 用分片提升缓存效率

  • 108 | open file cache提升系统性能

  • 109 | HTTP/2协议介绍

  • 110 | 搭建HTTP/2服务并推送资源

  • 111 | gRPC反向代理

  • 112 | stream四层反向代理的7个阶段及常用变量

  • 113 | proxy protocol协议与realip模块

  • 114 | 限并发连接、限IP、记日志

  • 115 | stream四层反向代理处理SSL下游流量

  • 116 | stream_preread模块取出SSL关键信息

  • 117 | stream proxy四层反向代理的用法

  • 118 | UDP反向代理

  • 119 | 透传IP地址的3个方案

  • 120 | 性能优化方法论

  • 121 | 如何高效使用CPU

  • 122 | 多核间的负载均衡

  • 123 | 控制TCP三次握手参数

  • 124 | 建立TCP连接的优化

  • 125 | 滑动窗口与缓冲区

  • 126 | 优化缓冲区与传输效率

  • 127 | 慢启动与拥塞窗口

  • 128 | TCP协议的keepalive功能

  • 129 | 减少关闭连接时的time_wait端口数量

  • 130 | lingering_close延迟关闭TCP连接

  • 131 | 应用层协议的优化

  • 132 | 磁盘IO的优化

  • 133 | 减少磁盘读写次数

  • 134 | 零拷贝与gzip_static模块

  • 135 | 用tcmalloc优化内存分配

  • 136 | 使用Google PerfTools分析Nginx

  • 137 | 使用stub_status模块监控Nginx的状态

  • 138 | 第三方模块源码的阅读

  • 139 | Nginx的启动流程

  • 140 | HTTP第三方模块的初始化

  • 141 | if指令是邪恶的吗?

  • 142 | 解读Nginx的核心转储文件

  • 143 | 通过debug日志定位问题

  • 144 | OpenResty概述

  • 145 | OpenResty中的Nginx模块与Lua模块

  • 146 | 如何在Nginx中嵌入Lua代码

  • 147 | OpenResty中Lua与C代码交互的原理

  • 148 | 获取、修改请求与响应的SDK

  • 149 | 工具类型的SDK

  • 150 | 同步且非阻塞的底层SDK:cosocket

  • 151 | 基于协程的并发编程SDK

  • 152 | 定时器及时间相关的SDK

  • 153 | share.DICT基于共享内存的字典

  • 154 | 子请求的使用方法

  • 155 | 基于OpenResty的WAF防火墙

课程背景

Nginx 很火,因为它就像一个万能药,在任何存在性能需求的场合总能找见它的身影,它可以轻松在百万并发连接下实现高吞吐量的 Web 服务。同时,类似于 OpenResty 和 Tengine 这样的第三方模块群,进一步发展出了新生态,使 Nginx 的应用进一步向应用防火墙、CDN 等领域扩展。

网络上关于 Nginx 的使用介绍虽然非常多,但存在两个问题:

一、仅从如何使用层面介绍,没有把离散的知识点串成线,这导致大家难以应对未出现过的、个性化的定制场景。

二、没有成体系的性能优化知识介绍,而在企业生产环境下,我们往往需要从应用到系统的完整优化方案。

本课程则致力于解决以上两个问题,课程讲师陶辉过往在华为、腾讯、思科、阿里巴巴等知名企业进行 Nginx 模块开发及性能优化的多年实战经验,使得他可以从 HTTP 应用层的视角、分布式集群的视角、硬件及操作系统内核优化的视角为大家体系化地解读 Nginx 的核心知识,帮助大家从 Nginx 的初级使用者成长为高阶使用者。

在这个学习的过程中,陶辉老师也会把自己的学习方法论分享给大家。掌握更多的方法论,进而扩展自己的方法论,这也是进一步深入学习 Nginx 以及其他技术的有效方式。

讲师简介

陶辉,杭州智链达数据有限公司 CTO 兼联合创始人,著有《深入理解 Nginx:模块开发与架构解析》一书。

10 余年互联网一线工作经验,毕业于西安交通大学计算机科学与技术专业,先后在华为中央软件部、腾讯 QQ 空间、思科中国 CRDC、阿里云飞天团队工作。

研究方向为介于 Iaas 和PaaS 间的弹性计算,多年以来专注于 Nginx 的定制化应用,对 Nginx 的设计与特性有深刻认识,实战经验丰富,编写过许多优秀的 Nginx 模块并应用于企业级产品中,同时撰写了大量关于 Nginx 的技术文章。擅长 Linux 下高性能服务器的开发,以及分布式环境下海量数据存储的设计开发。

热点专题:进阶 Nginx 高手必须跨越的5座大山

限时福利

基础要求

  1. 熟练使用 Linux 命令行相关操作;
  2. 掌握 HTTP 等基本的网络协议;
  3. 了解 Web 服务器的基础知识并自己搭建过网站。

课程收获

  1. 基础知识详解及核心架构剖析;
  2. 搭建支持百万高并发的Nginx服务;
  3. 从内核优化到源码解读的全方位拆解;
  4. OpenResty + Nginx 开发实战。

如何在电脑端观看视频

  1. 用浏览器访问 https://time.geekbang.org ,登录极客时间账号;
  2. 然后在“讲堂”板块选择“视频课程”标签,点击相应的视频课程即可观看。