〖课程介绍〗
Nginx 很火,因为它就像一个万能药,在任何存在性能需求的场合总能找见它的身影,它可以轻松在百万并发连接下实现高吞吐量的 Web 服务。同时,类似于OpenResty 和 Tengine 这样的第三方模块群,进一步发展出了新生态,使Nginx 的应用进一步向应用防火墙、CDN 等领域扩展。
网络上关于 Nginx 的使用介绍虽然非常多,但存在两个问题:
一、仅从如何使用层面介绍,没有把离散的知识点串成线,导致大家难以应对未出现过的、个性化的定制场景。
二、没有成体系的性能优化知识介绍,而在企业生产环境下,我们往往需要从应用到系统的完整优化方案。
本课程则致力于解决以上两个问题,课程讲师陶辉过往在华为、腾讯、思科、阿里巴巴等知名企业进行 Nginx 模块开发及性能优化的多年实战经验,使得他可以从 HTTP 应用层的视角、分布式集群的视角、硬件及操作系统核优化的视角为大家体系化地解读 Nginx 的核心知识,帮助大家从 Nginx 的初级使用者成长为高阶使用者。
〖课程目录〗
第一章:初识Nginx4 F* k1 K' w. C8 A9 E, \$ R
01 | 课程综述
02 | Nginx 适用于哪些场景?& _4 \0 Q# u: D$ I1 p) R
03 | Nginx 出现的历史背景0 f% D: N3 |4 t& z# O
04 | 为什么用 Nginx:它的 5 个主要优点
05 | Nginx 的四个主要组成部分" [# x" ~: B7 W: o' V
06 | Nginx 的版本发布历史; m7 t! w1 N1 n, ~, _$ e( N1 n3 q
07 | 选择哪一个 Nginx 发行版本?
08 | 编译出适合自己的 Nginx# ~: i3 q3 Z+ s/ R m D
09 | Nginx 配置文件的通用语法介绍
10 | Nginx 命令行及演示:重载、热部署、日志切割5 O# O6 r; f) v6 t4 j+ M! B) n; i
11 | 用 Nginx 搭建一个可用的静态资源 Web 服务器2 E% C3 \$ M7 ^
12 | 用 Nginx 搭建一个具备缓存功能的反向代理服务! D+ U$ l: r! N* [! M6 a/ u; A* F
13 | 用 GoAccess 实现可视化并实时监控 access 日志
14 | 从网络原理来看 SSL 安全协议
15 | 对称加密与非对称加密各自的应用场景1 o9 g4 \, i1 B+ f# ^4 h G/ P
16 | SSL 证书的公信力是如何保证的?9 U) }9 `9 b2 P: L! `5 o$ H% u
17 | SSL 协议握手时 Nginx 的性能瓶颈在哪里?7 z* H) S- I- I) _
18 | 用免费 SSL 证书实现一个 HTTPS 站点
19 | 基于 OpenResty 用 Lua 语言实现简单服务
, v) U9 |7 d1 |3 o0 _+ y
第二章:Nginx架构基础6 S8 c, N" A/ N8 P
20 | Nginx的请求处理流程1 V! {* r) @ L$ R2 s0 P! @
21 | Nginx的进程结构
22 | Nginx的进程结构实例演示+ B8 z7 z. d* ~/ y
23 | 使用信号管理Nginx的父子进程% z( {% P; B" F v
24 | reload重载配置文件的真相
25 | 热升级的完整流程: g5 c4 R/ f J5 Z2 o! a. }
26 | 优雅地关闭worker进程
27 | 网络收发与Nginx事件间的对应关系
28 | Nginx网络事件实例演示
29 | Nginx的事件驱动模型 d1 P) ]( |$ F1 i) O, }
30 | epoll的优劣及原理; Z! Z, s/ c/ c. Z1 K) Y
31 | Nginx的请求切换. z# x/ O3 T# e
32 | 同步&异步、阻塞&非阻塞之间的区别0 U8 i" O% V% _# h2 O" i/ G4 r
33 | Nginx的模块究竟是什么?
34 | Nginx模块的分类
35 | Nginx如何通过连接池处理网络请求( }; B% A( {1 o* p* g
36 | 内存池对性能的影响 v, n; s8 N) V; F! `
37 | 所有worker进程协同工作的关键:共享内存
38 | 用好共享内存的工具:Slab管理器
39 | 哈希表的max_size与bucket_size如何配置
40 | Nginx中最常用的容器:红黑树
41 | 使用动态模块来提升运维效率5 j1 N) `' l2 e. I* n% k; c
1 D2 O" U" _) M. d
第三章:详解HTTP模块
42 | 第三章内容介绍
43 | 冲突的配置指令以谁为准? Q0 N% W5 n' V$ k3 Z* p" I/ r2 Y
44 | Listen指令的用法6 B0 Y+ E3 o& g9 A" D0 U
45 | 处理HTTP请求头部的流程
46 | Nginx中的正则表达式
47 | 如何找到处理请求的server指令块) j- k, U& p8 m$ }" ]$ [8 C0 n
48 | 详解HTTP请求的11个阶段
49 | 11个阶段的顺序处理' I, e" m! p _+ t2 n
50 | postread阶段:获取真实客户端地址的realip模块
51 | rewrite阶段的rewrite模块:return指令" k& `5 ], W8 W) F
52 | rewrite阶段的rewrite模块:重写URL% z3 M, H% p: F5 S! w
53 | rewrite阶段的rewrite模块:条件判断8 A- s6 X7 g, W" D
54 | find_config阶段:找到处理请求的location指令块8 V, {; R, y+ R' w8 q8 L
55 | preaccess阶段:对连接做限制的limit_conn模块
56 | preaccess阶段:对请求做限制的limit_req模块
57 | access阶段:对ip做限制的access模块
58 | access阶段:对用户名密码做限制的auth_basic模块
59 | access阶段:使用第三方做权限控制的auth_request模块
60 | access阶段的satisfy指令/ @' g+ M, a4 q |1 A. E! P
61 | precontent阶段:按序访问资源的try_files模块+ P3 `- P- h/ h: r: K) o
62 | 实时拷贝流量:precontent阶段的mirror模块" v7 U* R- l' x! N
63 | content阶段:详解root和alias指令
64 | static模块提供的3个变量
65 | static模块对url不以斜杠结尾却访问目录的做法
66 | index和autoindex模块的用法
67 | 提升多个小文件性能的concat模块
68 | access日志的详细用法
69 | HTTP过滤模块的调用流程
70 | 用过滤模块更改响应中的字符串:sub模块' j& b; s) o( Y
71 | 用过滤模块在http响应的前后添加内容:addition模块
72 | Nginx变量的运行原理! I( W @, f3 W* l( l
73 | HTTP框架提供的请求相关的变量( T# |) T& |* ~# D
74 | HTTP框架提供的其他变量
75 | 使用变量防盗链的referer模块
76 | 使用变量实现防盗链功能实践:secure_link模块
77 | 为复杂的业务生成新的变量:map模块
78 | 通过变量指定少量用户实现AB测试:split_client模块. v- l0 O8 M# P) L
79 | 根据IP地址范围的匹配生成新变量:geo模块
80 | 使用变量获得用户的地理位置:geoip模块
81 | 对客户端使用keepalive提升连接效率) e2 G" s5 d+ y4 `4 d' x3 H) h
' U1 K( f* o+ Z9 w3 D3 I6 o& p
第四章:反向代理与负载均衡
82 | 反向代理与负载均衡原理
83 | 负载均衡策略:round-robin
84 | 负载均衡哈希算法:ip_hash与hash模块; M3 G5 P& }) ~" p# r5 h# a
85 | 一致性哈希算法:hash模块 M2 [* |9 X; _3 n
86 | 最少连接算法以及如何跨worker进程生效$ t' M: e* k( M6 A. u9 {* I
87 | http upstream模块提供的变量7 j$ Z7 m1 H# `2 Z# C
88 | http反向代理proxy处理请求的流程' @ v" b: C, O2 Y
89 | proxy模块中的proxy_pass指令
90 | 根据指令修改发往上游的请求% o' C3 @2 p+ c. C; a! ]# Z
91 | 接收用户请求包体的方式3 B+ v5 q+ ^" ]" v: J" F4 g! r9 ]
92 | 与上游服务建立连接. L2 d2 F: H, w: G
93 | 接收上游的响应
94 | 处理上游的响应头部
95 | 上游出现失败时的容错方案" K: @; y& X% {: k i' \0 D$ Y
96 | 对上游使用SSL连接7 s; z0 u0 N. ^+ P, i" _
97 | 用好浏览器的缓存- m( i5 P; G3 o1 u+ H" W* b
98 | Nginx决策浏览器过期缓存是否有效
99 | 缓存的基本用法
100 | 对客户端请求的缓存处理流程
101 | 接收上游响应的缓存处理流程
102 | 如何减轻缓存失效时上游服务的压力% Q/ F H5 R6 X2 l8 |9 b$ ~
103 | 及时清除缓存6 w5 h2 K9 \" a; E7 G" t/ E
104 | uwsgi、fastcgi、scgi指令的对照表# q1 Q; W7 w% _$ Y' |! L
105 | memcached反向代理的用法
106 | 搭建websocket反向代理( o' E2 q8 ]$ Z# L& `+ r5 P( o
107 | 用分片提升缓存效率
108 | open file cache提升系统性能
109 | http2协议介绍
110 | 搭建http2服务并推送资源7 _' N/ K' [/ M" b7 Q7 F! C" |
111 | grpc反向代理2 X# l- K- C( N: B& _( S
112 | stream四层反向代理的7个阶段及常用变量
113 | proxy protocol协议与realip模块6 \, v; Q# G2 C* P5 @2 h5 g
114 | 限并发连接、限IP、记日志+ C! n7 @0 b0 j1 h0 j8 P
115 | stream四层反向代理处理SSL下游流量
116 | stream_preread模块取出SSL关键信息" ~" K+ Y1 ]) {2 |
117 | stream proxy四层反向代理的用法
118 | UDP反向代理) W! }, e% |# c6 d- P% I# Y9 J
119 | 透传IP地址的3个方案& ?$ d- T# Z5 r% v8 \: f. p
第五章:Nginx的系统层性能优化, `6 r# } M4 N- H! a+ w% c) i2 y# E: z
120 | 性能优化方法论
121 | 如何高效使用CPU
122 | 多核间的负载均衡1 w9 Z- }3 g/ f2 \1 \
123 | 控制TCP三次握手参数; \7 i2 @6 {8 U! l
124 | 建立TCP连接的优化" h* h1 s; e9 _% w
125 | 滑动窗口与缓冲区+ ~9 S H7 ~8 @! i/ `& g4 F
126 | 优化缓冲区与传输效率 p. c( q/ C M M3 u7 e7 t; _
127 | 慢启动与拥塞窗口6 T5 h+ Y! I6 `" ?
128 | TCP协议的keepalive功能3 x' M! Y. y# n+ g! @0 U
129 | 减少关闭连接时的time_wait端口数量 ?( x. P0 t- U2 k1 J
130 | lingering_close延迟关闭TCP连接
131 | 应用层协议的优化
132 | 磁盘IO的优化/ o4 T% y& i5 _; i/ I+ K0 z
133 | 减少磁盘读写次数
134 | 零拷贝与gzip_static模块
135 | 用tcmalloc优化内存分配
136 | 使用Google PerfTools分析Nginx
137 | 使用stub_status模块监控Nginx的状态
; w. `% T- T' f2 y1 L- K# D5 I
第六章:从源码视角深入使用Nginx与OpenResty A& x* C- a, z' W* _* g
138 | 第三方模块源码的阅读. w8 y' L Z1 x1 m5 _* s# K
139 | Nginx的启动流程+ t y1 w) t5 X9 a0 q, Y/ E) k- |
140 | HTTP第三方模块的初始化7 P* f9 a1 A! J6 Z" R
141 | if指令是邪恶的吗?' s' r: p3 C. ]/ O8 {
142 | 解读Nginx的核心转储文件
143 | 通过debug日志定位问题
144 | OpenResty概述
145 | OpenResty中的Nginx模块与Lua模块
146 | 如何在Nginx中嵌入Lua代码
147 | OpenResty中Lua与C代码交互的原理! M4 t; F# g* m
148 | 获取、修改请求与响应的SDK0 z- ^. ]; t1 }) p3 C7 c
149 | 工具类型的SDK
150 | 同步且非阻塞的底层SDK:cosocket
151 | 基于协程的并发编程SDK
152 | 定时器及时间相关的SDK
153 | share.DICT基于共享内存的字典
154 | 子请求的使用方法7 F p8 p7 V8 p
155 | 基于OpenResty的WAF防火墙
〖下载地址〗:
|
|