java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 39281|回复: 376

【java电子书】深入理解Nginx:模块开发与架构解析(第2版) PDF 电子书 百度云 百...

  [复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2093

    主题

    3751

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66773

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2016-8-1 14:13:22 | 显示全部楼层 |阅读模式
    java自学网(www.javazx.com)-java论坛,java电子书推荐:《深入理解Nginx:模块开发与架构解析(第2版)》7 L1 x4 u# l9 p; [8 b8 X
    java电子书推荐理由:本书包括四大部分:第一部分针对初级读者,介绍Nginx关于获取编译运行的基本知识。第二部分针对中级读者,以一个例子为主线。第三部分针对高级读者,这是本书的重点,彻底解析Nginx架构。第四部分针对中高级读者,以Tengine的开源模块为例。4 ?# _  q/ s$ b( E: E. ]5 c9 \

    % S8 T* ^: t$ }8 B0 P  D5 Z* W2 T
    ( R" H7 f% K- X* @% U
    作者:陶辉) `* w. z$ R8 Z9 f
    出版社:机械工业出版社9 }0 j- A3 i2 c$ M& {3 m' b5 n
    出版时间:2016年2月
    ; n% @' u* v( M
    * P5 R" Y4 o# `0 G
    - O7 ?! o1 m* A# K+ g
    QQ截图20160801140226.png
    ! z  u; Y2 h9 ], g$ Y0 p+ C" I9 O) C) o. G
    8 s: a+ }% i! M; s
    java电子书目录:" Z3 A" X" {: k

    / c7 q# h5 g- U
    , Z( q5 X# S* w; n; S
    前 言6 X' t4 V% P& B; O* j  j# R

    . F( ?, Y2 i( k9 _8 L  @第一部分 Nginx能帮我们做什么; }' p- I: j2 L; Y- J: c
    2 W3 m7 u  Q+ Q- F0 ^: v. }
    第1章 研究Nginx前的准备工作  2
    1 C3 w- l9 |, i- f0 _( }, S" A$ U0 k; x3 K, ]* B
    1.1 Nginx是什么  26 x- \! G% n  w: t8 |
      I0 q5 x/ `- a! |
    1.2 为什么选择Nginx  5
    ) b5 i; v* x4 I: ?4 q# g+ v. M$ C9 [* o0 f9 G
    1.3 准备工作  7
    2 i3 n2 H1 ]# ?* H+ P% ^3 _2 [. w4 v! t1 |0 k" M
    1.3.1 Linux操作系统  7% I9 R1 n8 X7 @4 M1 [+ ~) m: s
    0 a2 A" J0 D# W4 O
    1.3.2 使用Nginx的必备软件  74 q& z' \% c9 }/ M. j% K# B
    ' |. ^2 q) N  s* T6 y" x' ?$ K5 D
    1.3.3 磁盘目录  8! i; v; i9 R8 v! e/ {
    3 t2 Q+ E- f4 R6 S: c/ u, O
    1.3.4 Linux内核参数的优化  9# ]" o% j' T! y3 w; [# S

    3 d0 ?0 V3 K' x% f1.3.5 获取Nginx源码  10. B7 d. S* v) i

    " G( \8 l! a8 ]1.4 编译安装Nginx  114 q, D* s& G; m/ c$ b

    , y+ X6 n/ q3 [' H" x; H% O1.5 conf?igure详解  11
    ) d! U  m8 ~4 ~8 t3 l+ X. i7 M' {! [! W, `1 C( T1 h
    1.5.1 conf?igure的命令参数  11
    5 C! j# K. L1 w  i
    # L: ?- w" \- I1 |* r2 ?  e0 j1.5.2 conf?igure执行流程  18
    4 x+ @' R: R9 T. _' N( K( N( p+ w
    1.5.3 conf?igure生成的文件  21
    $ J6 c4 \7 U( s% s5 Q; Q( Q6 H1 ^8 P8 Q" f- o" K
    1.6 Nginx的命令行控制  23$ A) [0 ]1 d. A1 z# q- e1 P
    / l2 ^3 L9 ^( w2 p3 R) m
    1.7 小结  27. G8 B2 A$ K3 L( F
    6 E+ B$ s( o$ O
    第2章 Nginx的配置  28
    , T8 ^; M  @: a  e0 l1 r. _5 W2 U' a
    ) C+ s) k/ b) P( n- i2.1 运行中的Nginx进程间的关系  28
    1 f. b7 h- A% K! o9 W# R3 f0 B. t! m: `& E, h9 {
    2.2 Nginx配置的通用语法  31* M, K6 \) Y% J6 c' {/ F0 V
    0 T& C. i  v7 O% y# d, G
    2.2.1 块配置项  31+ r0 }/ r2 T: b6 z/ ~7 |. _* I

    7 M+ d+ u9 V; P$ k: C2.2.2 配置项的语法格式 32
    % }& u' |! ~3 S) Q( O- X* b7 x
    , e9 P! Q! b0 @2.2.3 配置项的注释  33
    4 T) {, s, ]3 q; a2 j% t7 S: F; N( f  i
    - H4 d, B4 a+ G8 k+ k% e2.2.4 配置项的单位  33
    9 J; i: [, w7 G2 [4 q8 J  V4 N3 r* S/ e- I
    2.2.5 在配置中使用变量 332 l5 w% L7 M/ B2 ]) f! e* V: G
    " S1 i) e0 J- L8 W3 G
    2.3 Nginx服务的基本配置  348 T! t$ I4 n- ^2 Q

    , d# S6 {1 j; y) s; D  g2.3.1 用于调试进程和定位问题的配置项 34' U2 _1 ^$ U/ @1 g
    0 z, _8 a1 J& l
    2.3.2 正常运行的配置项 36
    % a5 W- |, }' Y* d* }8 l' q: U4 g' V( H, Q: ?, }
    2.3.3 优化性能的配置项 37
    " M! D$ W# T; H: ]  C; j6 P# _0 A7 r
    8 e# [9 X& a; E' I: a5 Q2.3.4 事件类配置项  39
    $ i- c: e- I/ f5 s, e
    - X2 H: Y' u2 i. A9 t9 V2.4 用HTTP核心模块配置一个静态Web服务器  40
    1 w2 K3 r2 L3 i2 Z6 p. U2 C7 Q* K. _/ d1 v$ o( e; p4 U) t
    2.4.1 虚拟主机与请求的分发 41
    % q& a) k- P! @* @! [8 `; F" P6 M
    9 I: J8 v- ?7 b4 D; v; w, s0 M% r2.4.2 文件路径的定义  45: q$ `5 K9 [; a8 `7 A$ Z

    1 C. e+ d6 U4 [/ J) `2.4.3 内存及磁盘资源的分配 476 b2 R) t* s6 L' G9 N8 v
    5 S3 j; W8 K, v" z/ y
    2.4.4 网络连接的设置  49
    - r+ r) P2 {. U( g8 u: V1 _0 a2 i- N, p7 K) _+ u
    2.4.5 MIME类型的设置  52
    + h2 a! {: o( K$ p- C$ O& \+ X% R  l1 A
    2.4.6 对客户端请求的限制 53
    ! x5 O/ f9 J% i, y: U( H6 i9 b- d2 \, X
    2.4.7 文件操作的优化  54- W4 ?2 b3 u( S( u9 g9 Q
    ; [8 g) `8 r. K
    2.4.8 对客户端请求的特殊处理 56; X# L4 O" `( {8 L

    9 v2 E6 ]6 m5 B+ T+ e' G2.4.9 ngx_http_core_module模块提供的变量  57" g: _0 p5 d9 r& {5 E) X) C. I

    . L1 k* Q- ]8 E# `/ t# D4 |2.5 用HTTP proxy module配置一个反向代理服务器  598 A( O2 I: }: \; e+ {  B# c
    ) n1 x8 R# Y2 S6 V6 O
    2.5.1 负载均衡的基本配置 61
    4 h* E5 ]# y* P& f* B, P9 C6 U/ r  E) E% u$ {5 s) b5 `( W( A! m
    2.5.2 反向代理的基本配置 63
    5 D8 b8 W. u/ `9 [$ J& l) k6 X5 d2 C# B- c
    2.6 小结  66$ @  t3 H- s$ G7 n! h$ _' K
    + v* J6 r; i) \9 H
    第二部分 如何编写HTTP模块2 U" o* H& K: N- r; D, K

    " I0 p& K: t5 n& [7 E: H& R% U$ d第3章 开发一个简单的HTTP模块  68
    ) S! \6 i- o6 }3 y  U: Y# [* I- O% D# s" Y1 }& R0 V
    3.1 如何调用HTTP模块  68& t6 |1 i/ [+ O& g6 `+ d% r
    ; ?4 K& J- @3 z0 N% ?
    3.2 准备工作  70
    : D, \$ Q  A& H6 Z$ L9 k& J8 z5 m" |$ V4 F1 s4 Y
    3.2.1 整型的封装  71
    : }+ A3 t  t( d  a) a: E; E# J$ `1 x
    3.2.2 ngx_str_t数据结构  714 ]0 I; w) u. i- W$ b6 d
    $ h/ X. h' J- |) `' @6 i
    3.2.3 ngx_list_t数据结构  71: A8 W/ G2 Q2 P9 `

    + T0 l0 w- @& B3.2.4 ngx_table_elt_t数据结构  757 m! _/ m  w0 u. c7 r  T

    / g8 }5 J3 j3 v: G! z: O4 U3.2.5 ngx_buf_t数据结构  75
    % ?1 H+ W4 D, P# r) R5 {* N
    & v+ c! T8 C7 a' h3.2.6 ngx_chain_t数据结构  77; W5 G5 k" @: _

    . C( R8 P% D0 S3.3 如何将自己的HTTP模块编译进Nginx  77; A7 r9 q8 b# K) J

    3 V5 o# T. M2 Y' w/ e, J" t" ?3.3.1 conf?ig文件的写法  777 u% W% R) j' ?) a! [% D
    0 b1 \2 P' q* O- B! x. Y
    3.3.2 利用conf?igure脚本将定制的模块加入到Nginx中  78
    : j4 C# j2 n9 o0 @. L- k( A0 G: `5 t. G$ P1 {* f
    3.3.3 直接修改Makef?ile文件  81
    1 r, X* j3 I+ o$ ?" ~* ]
    2 y: W3 a( }$ U: K8 C3.4 HTTP模块的数据结构  82
    / l7 x3 ]  x4 v- n
    & p8 r1 {) x) q  J! Q0 U5 @  c$ Q3.5 定义自己的HTTP模块  866 G8 Z* Q* Y( `# F% R
    ) j5 S6 g' G/ e
    3.6 处理用户请求  897 ^. W" z7 T2 E$ C! \

    : U% S( d% }; j/ y1 m$ u3.6.1 处理方法的返回值 893 m4 r( ?5 d: B! R
    - ?, d+ w5 J9 d* i  h! g: G. j( ^
    3.6.2 获取URI和参数  92
    / b' M8 a$ U8 [4 ~4 K' f6 w5 S" |1 Y; R# s4 D
    3.6.3 获取HTTP头部  94
    , v- a1 I2 X! T7 u1 X- q% Z9 q
    8 _' I# N4 Z3 u3.6.4 获取HTTP包体  97
    5 S* ]& F' N( Z, o# s. W# R$ }' b- @# d& H: H+ z1 J7 y
    3.7 发送响应  996 A; J5 [5 \# Y6 H6 q
    % ^6 p; O; O; _
    3.7.1 发送HTTP头部  990 r8 D$ G4 |% ?

    0 U* a! @0 \1 d9 e, I3.7.2 将内存中的字符串作为包体发送 101
    ' l0 u5 F# o# a3 l/ }
    # t2 ?3 W* U% Z6 b; u& |1 o3.7.3 经典的“Hello World”示例  102
    9 m6 R7 [) @, |6 q/ a, q4 ~9 x" H6 l& X
    3.8 将磁盘文件作为包体发送 103
    # }# W# J2 B: X4 y' E" W# n6 ?  f7 s1 Y  U- [. ~
    3.8.1 如何发送磁盘中的文件 104% R4 u; ?# X; S5 w! u; y' H3 i
    4 m9 h4 S) T& ]+ m! z" |7 J
    3.8.2 清理文件句柄  106
    & ~* C/ P1 z1 {0 z2 y: b3 k* U' D) m, O
    3.8.3 支持用户多线程下载和断点续传 107
    7 x9 M! J! K# L' A2 ^! l$ r
    . x0 F( ^- s; \! z& |4 g3.9 用C 语言编写HTTP模块  108
    & v" B1 Q! G+ {6 n, ^( N# z, E: f
    : r: h4 M9 [, X2 |1 ?5 h' q3.9.1 编译方式的修改  108
    6 y+ M6 f% X. a, H% L) r4 G3 _; o1 t( w2 }& X9 n
    3.9.2 程序中的符号转换 109
    3 |8 Y# J4 j6 c* B( x- C% E( b0 G+ b1 K% q6 |% @- o5 U
    3.10 小结  1100 J: ]1 j- o) m) b: q- e' n3 c

    + s) w7 y9 |3 d8 H- J3 ?6 q6 z第4章 配置、error日志和请求上下文  111. d6 n. g2 u% U% M0 S/ g
    ' m: R, k; {& b3 S9 ^
    4.1 http配置项的使用场景  1118 l& z$ Y, D7 E' F1 o: l& I
    % Q- J7 I8 P9 M
    4.2 怎样使用http配置  113
    * M- }: m- L" d# _+ }0 D; C0 `
    0 H% n) j) V1 t9 V: L+ c+ a$ J4.2.1 分配用于保存配置参数的数据结构 113
    , M: L  z6 L( v: e' _0 Y- R+ h- I$ I' B3 e& ^% K; b! f5 O
    4.2.2 设定配置项的解析方式 115
    2 V- y( F3 u% @4 `1 F: Q. F/ @6 L, G# g& b
    4.2.3 使用14种预设方法解析配置项  1219 b. ~! K: F  y

    5 x% P2 L, {5 S3 q+ v4.2.4 自定义配置项处理方法 131/ A  \8 E8 `" h6 `0 W

    - w3 h. i7 ]+ a8 u+ |2 p& ^" k4.2.5 合并配置项  133/ E  n" e& m* e5 |
      H; s. W8 U8 r- y' v0 K
    4.3 HTTP配置模型  135
    # g4 J0 J# X9 u7 x1 }
    $ J1 d8 j8 w  W7 A+ @3 P4.3.1 解析HTTP配置的流程  136
    ; \7 Q. j, _" C2 R7 T  q4 g; r) q9 H1 Z# f6 n* ?. B
    4.3.2 HTTP配置模型的内存布局  139
    ) u0 r+ E1 k% R  s2 W7 @! N1 J  Z+ E- i+ i, `, T
    4.3.3 如何合并配置项 142- Q; [- O2 @7 D' y# _
    " F  c2 d7 M  q: g* t! u
    4.3.4 预设配置项处理方法的工作原理 144* c3 S3 A- C' a$ f* A
    ' m: L' q/ Q; y4 L% Q2 u. f
    4.4 error日志的用法  145
    3 Y. ~9 [* f6 k/ |, \# g$ ?  p$ B- E& r
    4.5 请求的上下文  149  e3 z0 c# \1 U1 {* M

    / O6 F  \: @& X5 a7 b4.5.1 上下文与全异步Web服务器的关系  149
    , y% {6 K3 W) z" g* y$ K( M* U; f$ s# g
    4.5.2 如何使用HTTP上下文  151
    ! a0 ]0 Y. k8 y/ l5 S' I" S+ [
    ! K- N: R( P( V* O' K; j) b+ G4.5.3 HTTP框架如何维护上下文结构  152
    1 R1 G+ ^1 B8 P% h, o5 D7 V5 Z7 z$ A7 h
    4.6 小结  153
    3 N* n( {: k( p+ W# c  e! |* b) r  b1 X( _+ m
    第5章 访问第三方服务  154; T& p0 U! X7 W3 ~
    ! V3 j7 N! x& a& v8 z7 q
    5.1 upstream的使用方式  155
    , g0 _# A6 l3 _, P: `8 P: V$ }' S$ q: e5 G
    5.1.1 ngx_http_upstream_t结构体  158
    * I6 j& g5 B7 q* Z# ?$ j) m" z- j: H" K# J5 S1 ~; Y- ?" u# M
    5.1.2 设置upstream的限制性参数  159
    5 b1 x' D# x- y5 Z
    3 e4 p7 k9 l( u% q. t5 O5.1.3 设置需要访问的第三方服务器地址 160
    6 s" S0 e, Q' N8 n- Y6 s- ?: e2 g/ m. r$ y2 ]# J- r+ g$ I9 ^& H( E) }
    5.1.4 设置回调方法  161
    6 j! t& `4 P( |, r4 a3 V
    % ]) t2 V; p5 q1 U- S7 i5.1.5 如何启动upstream机制  1617 b% v1 q7 L. u7 r1 c0 j
    ' [2 D5 g, l4 c0 l2 B
    5.2 回调方法的执行场景 162
    ) ]+ w" E8 g3 b& k  x$ k3 ?) [. o+ N( L; D4 w: d* L
    5.2.1 create_request回调方法  162" J  j* t) K- c' s4 K* e

    ! l0 |) [9 S' S+ g4 s9 K+ ~5.2.2 reinit_request回调方法  164
    " I) a, l- e2 |  i" V
    % {% Y, r3 V! D& n: F& k5.2.3 f?inalize_request回调方法  165, x7 x3 d/ u' V- u$ Z- u( k
    # @: k2 _1 M" v' ^- L+ P5 t
    5.2.4 process_header回调方法  165
    6 o- y* J" \. i
    ! ]0 ?% J9 o4 U0 {6 h' M5.2.5 rewrite_redirect回调方法  1677 _4 l8 g  [0 j" k9 d/ P' X

    0 f# r8 j/ m' a' ?% L% E8 n$ _5.2.6 input_f?ilter_init与input_f?ilter回调方法  1670 }+ m4 z- P! l8 ?1 A

    , J4 a) Y' @: ~, b+ R5.3 使用upstream的示例  168
    2 ]6 L. X, g, X4 U8 F8 a' P9 Y3 d! p, N0 t& w# ^
    5.3.1 upstream的各种配置参数  168
    . G8 t8 X# {/ P5 z- @
    9 H; R8 o; M# y. e0 Q) P5.3.2 请求上下文  170  S" g& S& X. w& ~9 Z1 u3 l2 M( B
    - E( H; l" U. T2 r6 C8 p6 \8 T7 O; W
    5.3.3 在create_request方法中构造请求  170. c( c: p$ `  R, w9 t' T6 B

    5 f- w5 C9 ~4 y3 _% N5.3.4 在process_header方法中解析包头  171
    2 S# Q+ p  e! H4 u1 T
    3 u4 {3 Q# B- H/ b/ c7 D5.3.5 在f?inalize_request方法中释放资源  175
    - E8 Q( ^8 l3 K4 q6 y$ ^" |
    " i8 {: x! f9 K& V5.3.6 在ngx_http_mytest_handler方法中启动upstream  175* a1 e0 y  c' P! a- [

    # @, j1 y/ h3 S& ?8 Z+ s/ G5.4 subrequest的使用方式  177
    + N( L! W$ H  ~( y, k3 v
    . V; O: Q" {) L3 L. ~+ w% `7 n( x; N5.4.1 配置子请求的处理方式 177* y  h: ?" L0 [6 V' \! p  U$ Y! `

    3 Y' W) |+ q: m. G. N; R% C8 }; u/ v$ O5.4.2 实现子请求处理完毕时的回调方法 178
    1 B" ?4 Q1 m2 Z
    # A3 G. U+ \3 x. |; \( J5.4.3 处理父请求被重新激活后的回调方法 179
    0 n5 ]; H& O4 z! ?: ]4 a0 W$ w. h! L, H8 S. G4 y
    5.4.4 启动subrequest子请求  1791 T& `1 K# |5 j( c& f6 h# b

    2 S  o* \: g6 ~# V9 J5.5 subrequest执行过程中的主要场景  180( a  I0 H# z8 \% Z$ c

    3 P; S, J! q; _. j5.5.1 如何启动subrequest 180
    ' K' `. ]8 c7 _- Y  o2 K) L0 f! `6 c5 H4 j, N5 v
    5.5.2 如何转发多个子请求的响应包体 182, A; O8 j0 e! S+ V

    ) h; G' P  n' K5.5.3 子请求如何激活父请求 1850 q6 N3 p, E9 d: W
    5 E$ ^/ L" r9 g$ x
    5.6 subrequest使用的例子  1871 p7 Y4 h% L7 C
    & f  ]+ x7 b( y8 E
    5.6.1 配置文件中子请求的设置 187+ r: G  K' o/ F) k; h$ U- u- [

    2 G  ]- z" B, R5 y5.6.2 请求上下文  188
    ! d2 |. J# v  O$ \$ p' p/ q! D& [( M$ g8 o. {$ a
    5.6.3 子请求结束时的处理方法 1881 a2 r( y+ c# ~; ~3 T

    % D- Z  q+ m0 U9 y8 [) m5 g5.6.4 父请求的回调方法 189$ ?/ x  R3 z  v7 [' q1 C2 w! o& r

    ! U! m% i1 }! O- o6 a* }5.6.5 启动subrequest 190# E7 V+ O: u( P4 `

    6 r5 J  x0 Q! X$ {! a1 X' j5.7 小结  191/ f* F7 ?3 t9 q" Q) a0 T: n" K8 t

    7 y; [! I7 t% h$ S  H第6章 开发一个简单的HTTP过滤模块  192& N2 r6 o) S6 C. A; b
    + {6 p" a. h/ m% ^& c# [5 |7 z* j
    6.1 过滤模块的意义  1922 c; N7 Q+ E9 E. T5 @$ o& g

    , B8 D0 `0 ]5 D* j6 V6.2 过滤模块的调用顺序 1933 a# i& p& U3 }4 u

    " U2 P. D7 |' a/ r6.2.1 过滤链表是如何构成的 194
    0 l: x9 s- T3 J1 }# v6 M7 ~; ]: X9 Q+ ?# O" H( ]8 ^7 Y5 E
    6.2.2 过滤链表的顺序 1963 u" ^* z4 X6 Y+ F/ |+ A

    ) Y3 O' }' z5 h: ~% y8 U6.2.3 官方默认HTTP过滤模块的功能简介  197# W4 W  d4 o8 ]7 d

    + Z/ w9 P1 I5 p" ]6.3 HTTP过滤模块的开发步骤  1981 n: `5 l+ J1 S% c" M. q

    ; w# T. p" W) O( `, A0 N* @6.4 HTTP过滤模块的简单例子  200/ S8 Z8 f0 B# I+ }5 H  U, E' S6 ^

    6 M! ]9 {1 b( X7 E2 E2 X# n2 a6.4.1 如何编写conf?ig文件  201; N% n- ~# p) ]) D" T% z  k5 m

      _" I! z+ n. D$ J; S" W' N6.4.2 配置项和上下文 201
    , a, {, F4 J( H4 N
    # o. z9 J+ {4 A3 j. m; |6.4.3 定义HTTP过滤模块  2033 r- \" `! t( A/ X: J. J" Q
    8 S8 W6 E1 t! b4 m( M6 Y3 P7 A% f
    6.4.4 初始化HTTP过滤模块  204
    , m8 G6 ~) C: y
    $ A* F6 x. ?+ p3 A: T! k% u$ Q6.4.5 处理请求中的HTTP头部  204
    4 S" t2 H! @# _; L* u
    5 j0 h' N" B6 A* m6.4.6 处理请求中的HTTP包体  206
    0 T* u# M2 J- g; |4 C; b' x# T5 `
    6.5 小结  2061 U1 s: _6 |, }+ n2 f; G
    ( x7 A6 }0 n. T  A
    第7章 Nginx提供的高级数据结构  2076 i8 K" c$ O: X! ]$ N

    ; d% W) X6 L# b( P$ E7 P/ H0 c, u0 V7.1 Nginx提供的高级数据结构概述  207) }% S0 Q6 z3 v/ }, M; N9 t
    & Q# n+ l, V' X/ C7 ?# ^
    7.2 ngx_queue_t双向链表  209
    . @& X; r: q3 A7 x# R4 z3 k, i) @3 `
    * J! r. ]' w" A* e5 u4 L7.2.1 为什么设计ngx_queue_t双向链表  2095 d+ g7 ^$ J, U: h. o5 V. f
      o( J/ d3 I7 D4 d- o# N- r
    7.2.2 双向链表的使用方法 209* Z- m+ ?. K3 m7 C

    6 x0 ^! Z, \5 K7.2.3 使用双向链表排序的例子 212
    ! V8 ]1 K8 l8 Y" s
    ' t* Q2 l# d3 i  A8 a' D3 O7.2.4 双向链表是如何实现的 213
    6 O' U) @! Q: e" X1 d
    * ]# L6 p4 e6 ]$ g) `5 I7.3 ngx_array_t动态数组  215" S& C/ O, v5 B$ y4 L( T/ {
    ' k, m3 c# g6 ~- W# g/ P
    7.3.1 为什么设计ngx_array_t动态数组  2154 n9 t* C  N$ v4 f' M2 O, g
    ' N- |( u4 G: J5 X
    7.3.2 动态数组的使用方法 215: D! J2 n& R0 Q$ D5 R

    - |' U$ @, [" }0 \/ }+ k7.3.3  使用动态数组的例子 217. t1 }1 X) B% i- _% l

    2 g, v: I9 |& i, a: s3 j7.3.4 动态数组的扩容方式 218
    . {/ z7 m% m; ~" D5 y# _2 j, |; f' N: `8 s
    7.4 ngx_list_t单向链表  2190 J# p* |6 A2 v; h4 L1 |

    5 x; j+ u: j7 _" p7.5 ngx_rbtree_t红黑树  219. Z6 @7 n6 }; `, x8 i! O# w% \
    0 Y7 r- z7 w7 d8 ?5 }  q
    7.5.1 为什么设计ngx_rbtree_t红黑树  219
    * |9 ]: n# L. A  [8 d  Q- [
    ! ^/ b, ?) t5 n/ \; ]# J" m1 C7.5.2 红黑树的特性  220
    ! b) d$ n$ V- t8 N' V9 M; T5 F; u6 n  c, T. u4 F4 E
    7.5.3 红黑树的使用方法 222
    9 x8 i( x+ k/ k- a& t  ?0 S
    , z* t4 I& A- D! U! C2 }6 {& L* _7.5.4 使用红黑树的简单例子 225+ h$ ]" B  g3 J7 H, b

    8 O& a. _0 C) e, ]: I+ B7.5.5 如何自定义添加成员方法 226/ ^) B9 R- @+ h* [

    ) t9 p' e7 `6 M0 n7.6 ngx_radix_tree_t基数树  2283 T- t9 d& o' j: T$ J
    ' ^5 G0 J3 B% P1 M: A
    7.6.1 ngx_radix_tree_t基数树的原理  228
    6 N2 L9 S$ L! k4 E8 q
    ! Q1 N1 y! X  `7.6.2 基数树的使用方法 2303 s, F& s8 [4 \. t% G

    . G) q" g  [$ f/ ]7 _% M7.6.3 使用基数树的例子 231; Z7 ~4 t! c  e1 Y3 u, ]

    ' A9 x8 q) J) P% n; A7.7 支持通配符的散列表 2327 T* U% R$ I0 t$ k9 U- h
    & ~3 s4 Q/ g% n2 m6 L: X6 N& s
    7.7.1 ngx_hash_t基本散列表  232
    1 R) }; z& p: J6 E5 Y9 k) v
    % ?1 N/ z: l5 j- e7.7.2 支持通配符的散列表 235  Z/ ^  E  i/ Z  C7 G$ T

    2 r5 F8 v' h# U) Y' t9 ]% \. S7.7.3 带通配符散列表的使用例子 2414 _4 c4 s1 B0 m$ {

      K; L0 K2 ~( `) u2 B7.8 小结  2459 P2 Q2 Q0 w! }9 J& g9 t

    ) j+ m9 _! \2 O# ?9 q: [% [  E第三部分 深入Nginx
    8 Y5 r  v1 _0 l6 w, N1 `4 Z; \1 m+ z, |
    第8章 Nginx基础架构  2484 Z" E7 |! i/ R( G
    * {. O+ R  ^9 E7 n
    8.1 Web服务器设计中的关键约束  249
    3 k9 P- C0 N! ]: r  ?8 M3 h
    7 u' P8 |7 \2 G9 K  ?, A8.2 Nginx的架构设计  251+ z6 P- y; k4 ~2 a

    + G3 S  w  X% f8.2.1 优秀的模块化设计 251- e) V. B' t0 s7 N1 |

    8 g5 I  z* G9 Z5 c" T8.2.2 事件驱动架构  2546 M$ O( E  d, b9 V

    # Y4 X( K. m! c3 B, |+ @8.2.3 请求的多阶段异步处理 256
    ! P9 z: z6 p' U5 R
    8 j5 V2 N$ g9 O% b; T/ J& Q8.2.4 管理进程、多工作进程设计 259
    ) b- n- }* C! L! a0 @1 P8 A7 O8 _( F* W' P. z
    8.2.5 平台无关的代码实现 259
    ' S, q1 X8 U) A( @7 D, p6 }/ L
    - `$ C" s' d6 C; k; h# \, x, Y9 t8.2.6 内存池的设计  259
    ( e6 {* J1 Z( _' h2 l2 p
    1 N9 {* q( U9 x8 E+ |  T8.2.7 使用统一管道过滤器模式的HTTP过滤模块  260
    2 ]- T7 b+ |( L1 a0 r6 Q. y
    1 [# _" G& j, W3 o' Z8.2.8 其他一些用户模块 260! G4 L% N7 b9 X, ~+ O; [9 K5 i
    9 [$ a) G+ A! C" s
    8.3 Nginx框架中的核心结构体ngx_cycle_t  260
    ; U4 J) i- M- g' J( j0 s
    " r/ D8 z1 F# [% k5 R2 y8 d6 @8.3.1 ngx_listening_t结构体  261
    ' V% S: e; Y0 ~) S" C8 O- z% h0 J  `
    & b# s; v% `. k3 s8.3.2 ngx_cycle_t结构体  262
    5 j6 T; a, T# k% n- I' U$ b  {. i3 d4 [2 x
    8.3.3 ngx_cycle_t支持的方法  264
    + }4 v; |2 o& s
    / E% s% f9 v" ~8 r; g) S8.4 Nginx启动时框架的处理流程  2660 B( K3 u4 g2 y4 {
    % w! z2 X1 f; j# [( l* t+ I
    8.5 worker进程是如何工作的  269
    5 z% D5 }7 X" K6 O
    + g% h2 C5 T' a1 {8.6 master进程是如何工作的  271
    & ^8 x' {4 L, {+ Z5 m5 n+ N7 I6 _. v* [" N! N
    8.7 ngx_pool_t内存池  276
    , M: S- p1 i' z0 y2 a) x# u  z* W7 g
    8.8 小结  284
    ; p1 }! S4 X' A" t
    - \7 [5 l: j% j) ~" {第9章 事件模块  2856 H8 v. K, z8 i; I3 D5 W
    8 h* H3 _: _* q6 [' B
    9.1 事件处理框架概述  286( q8 x: }) _% Z+ v

    0 X: _3 e" W: `3 P5 g0 G) w4 m9.2 Nginx事件的定义  288
    , C  e3 B' F0 [4 g' B: U$ v
    . d& v- C9 }& ?9 x9.3 Nginx连接的定义  291
    0 M# f0 Q1 u% H) ^, b: m# L- R+ n! i7 Y. i0 H% \) a1 m: ]
    9.3.1 被动连接  292
    " G7 ~: H, T& r6 x( ~9 j* p' o5 s( p+ D5 P, T6 d/ t) y3 c
    9.3.2 主动连接  295+ o+ A: Z& C9 {4 C* E- p3 P
    7 y! p: ^5 x4 q6 V2 s" H" d
    9.3.3 ngx_connection_t连接池  296
    ! `. m3 ]+ J) p6 {: [3 v; H0 Z: m! G$ ?( u( I3 @, W
    9.4 ngx_events_module核心模块  297
    ) q  W- O% K3 a- Q: ?+ d! n
    ' @( Y7 W2 i8 Y" L" E9.4.1 如何管理所有事件模块的配置项 299- S" j7 `$ x. w$ l# ]3 R* A; K

    ' K' Z$ g) R% i6 W$ H! S& v6 Q9.4.2 管理事件模块  300
    - }3 D) w, p1 J, R9 l4 ]$ y3 R* x0 e9 A$ O
    9.5 ngx_event_core_module事件模块  3026 o" {: ]* r  k/ f- u% W

    # e; J# r! y/ o) k9.6 epoll事件驱动模块  3087 T6 _1 f4 U* o1 K6 E

    * y6 i5 i) ~* u* i& @5 F. ?- i9.6.1 epoll的原理和用法  308
    5 V* {: j! ~0 p  C
      \) D* g+ G9 a3 M9.6.2 如何使用epoll 310  Q! m; O' m  @3 ~1 T. z

    5 ^8 i7 k. G* }5 b- D9.6.3 ngx_epoll_module模块的实现  312
    7 i2 |9 ]; o7 t7 m4 i7 r) s& Y- j, Y
    9.7 定时器事件  320# f  U9 W+ p. u7 t' N9 Q8 X
      h" b( M; z5 B( l
    9.7.1 缓存时间的管理 3206 c% Y4 L) D' f6 C% f- y- L2 m4 H
    6 W& A2 F7 m& b: q% J7 E
    9.7.2 缓存时间的精度 3239 T! p0 u# I& P1 Z- o, J! P
      Z) i. I+ X; j; i+ z/ B
    9.7.3 定时器的实现  323# Y4 M. n5 s5 M4 s( i4 N, E

    # w% b8 G. B# O4 G) U# b$ I, P9.8 事件驱动框架的处理流程 324' K5 O/ t, G2 \; e
    3 T; F( ?( q4 N8 `$ v2 {
    9.8.1 如何建立新连接 3250 M5 x( X, V; D5 y1 |

    * E( r( P# w$ \) c* Y9.8.2 如何解决“惊群”问题 327) J$ W0 z5 \& Z0 s0 b2 F! ~

    2 R1 @) P' n4 R/ V  r$ ^9.8.3 如何实现负载均衡 329
    2 r- p7 y7 N6 A! j; H! H$ g2 V+ a6 j/ N& r2 V# v
    9.8.4 post事件队列  3309 ^' I5 c3 {& H

    + d) h1 b; O  z5 R. D9.8.5 ngx_process_events_and_timers流程  331  i3 n" a* q- l; G8 Z$ e+ h) j- a

    7 [0 T, `6 {3 m$ m; r& r  O; P9.9 文件的异步I/O  334
    2 J9 Y) l( [% g: x5 H9 c& h& q# W6 [
    9.9.1 Linux内核提供的文件异步I/O  335) u, |' `% A; V2 U& _) |

    4 s0 b% L0 v" t' y) m; z9.9.2 ngx_epoll_module模块中实现的针对文件的异步I/O  337* [% q9 E8 ?$ \# y
      S. M! V) w. |$ L+ u4 m0 D; u
    9.10 TCP协议与Nginx  342$ D0 \7 W& ^. z* f

    ' A  Z. A4 S7 S9.11 小结  347
    9 u+ T/ x- G0 N) q* i" O
    , c3 A' Z% U! Y5 w第10章 HTTP框架的初始化  3489 _6 S- L9 n) I0 o+ G# h  X, d
    * Y  O6 r! @$ T+ W
    10.1 HTTP框架概述  3492 C3 t1 N8 [7 Z$ G9 t* p
    5 I$ H! Q9 X6 K6 j
    10.2 管理HTTP模块的配置项  352( W  w% C- E. l

    ' D  H* h. ^# l- P! r( D- b5 N! `+ R10.2.1 管理main级别下的配置项  353
    7 H: [/ f& u/ O: I8 s- A; N5 f% l! G, m* k/ d
    10.2.2 管理server级别下的配置项  355' Z$ J# w9 U: O" a( `) B
    6 K, b. r* G: K/ U
    10.2.3 管理location级别下的配置项  3589 d% ?) p/ }' a1 a: d; G* E
    1 x( u- |( U# F; C. H
    10.2.4 不同级别配置项的合并 364
    2 s( i3 V2 i' X
    ! A) |6 N& j3 Z$ z* c- H# B6 @10.3 监听端口的管理  367
    - k/ |' T1 s3 a% u% {- i: ^
    + q( H( [. |8 ^6 x/ F2 ]10.4 server的快速检索  370% K3 f+ N+ ~/ l. E& N

    3 B/ f6 u4 _$ t; |10.5 location的快速检索  370
    7 j$ W4 _# T7 H
    ) h2 k/ y( Q% ?6 U9 W10.6 HTTP请求的11个处理阶段  372
    * U& c' {5 R9 j3 L3 `4 @3 q! @6 O- W
    10.6.1 HTTP处理阶段的普适规则  374
    - ?/ N: o/ L+ O
    # U: Q4 h8 t) T  y7 o, G9 G- r10.6.2 NGX_HTTP_POST_READ_PHASE阶段  375* K6 e8 H8 r! R) g: ?3 A/ A

    ; X- N3 X! X% n0 o8 x10.6.3 NGX_HTTP_SERVER_REWRITE_PHASE阶段  378/ l  G1 d; K3 K

    * E$ }' c2 A) Z* N/ g! S10.6.4 NGX_HTTP_FIND_CONFIG_PHASE阶段  378
    ! R3 d- S1 [! ]2 f- T
    ' W/ C7 @7 K2 Z0 H10.6.5 NGX_HTTP_REWRITE_PHASE阶段  378
    7 ~+ |0 P1 {! `& q. U9 k1 _* u9 s0 i" B
    10.6.6 NGX_HTTP_POST_REWRITE_PHASE阶段  3793 V- j) h+ e5 N( T: \$ j

    , |6 d0 W  s3 P( w% d' C7 d10.6.7 NGX_HTTP_PREACCESS_PHASE阶段  379
    , t4 _5 y0 u& o5 Z  ?
    ; ~# [" G3 a- @# z8 i% ~7 i, g( q10.6.8 NGX_HTTP_ACCESS_PHASE阶段  3799 c: s' \) F+ r, x0 X/ Z1 O
    ( B+ |5 P" L* Q& m. S: u1 z: }  X
    10.6.9 NGX_HTTP_POST_ACCESS_PHASE阶段  380
    - b3 `' |: Y2 i+ F4 |( z8 I
    5 @) _- ?  r8 r8 P* ^$ @+ S10.6.10 NGX_HTTP_TRY_FILES_PHASE阶段  380+ D. ?0 a8 R  ~' _1 W& y' M
    , \7 E7 |5 s2 e6 V2 D4 P# r: ]
    10.6.11 NGX_HTTP_CONTENT_PHASE阶段  380& d- G" t; n3 ?3 v/ M
    $ n# V, C# z% y8 u9 Z
    10.6.12 NGX_HTTP_LOG_PHASE阶段  382
    ; O; x& t* ]$ M* _' D& |# C! E, o& w1 }( K9 L" q9 q9 }
    10.7 HTTP框架的初始化流程  3825 d" G; b5 h2 w4 p% m
    + @( I* E# y1 `! K0 v5 G' ~
    10.8 小结  384" C) [% Z: h2 f* E; d1 `
    % m) w- B7 y* e/ U; l1 V% F0 z: @$ N
    第11章 HTTP框架的执行流程  3852 A& {5 _$ D3 J! C

      x% y- G  i3 r8 d. n1 Y# G11.1 HTTP框架执行流程概述  386
    5 }2 c9 r: D2 C% u
    8 i4 Z: G6 C/ i3 k11.2 新连接建立时的行为 387( t/ ^- }3 Q. i. H
    5 B) k5 H& P$ l; E: i4 z
    11.3 第一次可读事件的处理 388
    9 k# g# ]' Z0 m
    7 X) ?% v$ @5 ~  D9 a( [11.4 接收HTTP请求行  394
    4 O. ^- o  X: w* z6 W; c4 {6 u: f1 O* e1 ]7 i- a6 S0 z
    11.5 接收HTTP头部  398
    3 Q6 }' N8 @# e& U, J
    : x" V' q/ G4 E5 s: w8 l1 n! u11.6 处理HTTP请求  4001 s) @) F! C8 C6 l* |
    ; \! E9 C7 v6 s7 b  z& n$ L
    11.6.1 ngx_http_core_generic_phase  406
    $ @( j2 B" z+ {2 y) Q6 R2 C: G$ _% `
    11.6.2 ngx_http_core_rewrite_phase  4084 H$ v8 Z# y' Q5 [

    : k% f3 }1 w& ~4 V4 t# e11.6.3 ngx_http_core_access_phase  409
    , b4 p1 M- X8 Y0 Y, _0 r: f1 c# _' ~8 b& c! j4 L
    11.6.4 ngx_http_core_content_phase  412
    9 R# m* K9 I0 j& N% W
    3 X( E+ `' v8 P3 u2 `# m* J5 W11.7 subrequest与post请求  4150 O* ^7 |& Y+ \5 W; S) k
    ) p2 p, x% R" P  _8 E' o
    11.8 处理HTTP包体  417
      Q5 A' `  t% s( F, r1 O' L3 f7 y/ V- K3 ^( y+ Q
    11.8.1 接收包体  419& U* @/ d2 o0 O  {
    6 W1 o7 I7 N/ i. j2 Z
    11.8.2 放弃接收包体 4251 y5 t: g% v9 v( b+ E' L* ~& t
    ( m- j/ }; \) ^: o+ R2 A1 e- _8 l
    11.9 发送HTTP响应  429
      P& G% Y' T3 O3 s  U; E5 Y" s
    ! T$ o3 A% U9 `) E8 Z* v  P1 ]# Z11.9.1 ngx_http_send_header  430- g. f& i( e; g! J8 w+ n
    1 ]) p) c. W/ y: L7 x8 _
    11.9.2 ngx_http_output_f?ilter  432! |9 u2 L- t5 G& k* _
    & t8 n' Q- r2 P8 m
    11.9.3 ngx_http_writer 435% U9 O4 u/ H# E3 |: j2 D/ d6 P

    . r+ R, J5 ]$ C% v3 k1 T+ \11.10 结束HTTP请求  437
    - {+ j9 |" R% Y! k
    * C+ J5 A9 m( F. w5 _11.10.1 ngx_http_close_connection  438
    ' Q& s& c( U+ S' x0 `( d& Q1 z( Y5 q. ~( w) L- ^: K
    11.10.2 ngx_http_free_request  439  e, n+ n, v+ t) ^: c- O  v
    5 b' i2 `! ~2 @5 I1 h! }5 t
    11.10.3 ngx_http_close_request  440  V& o- C; M1 k
    5 H3 H4 d$ T/ N5 L7 |+ h1 d
    11.10.4 ngx_http_f?inalize_connection  441
    * d" y0 B& n8 u8 [) r4 B' e# `; ?" R8 b# J0 y1 h+ `
    11.10.5 ngx_http_terminate_request  4439 ~: w# \& Q# ^# s

    % y+ y, a- d8 y% V3 B: L$ i11.10.6 ngx_http_f?inalize_request  443
    ) z& H) Z$ Q! O6 A  _# i4 }, w/ @' n& l6 V( }
    11.11 小结  4463 m0 I8 j8 q8 A+ N: L( K& r. ~

    & J/ U! D% k" ?2 \6 l第12章 upstream机制的设计与实现  4476 F- E+ P$ n) [) o  g9 Q

    : x. O+ L7 ~( y; Y12.1 upstream机制概述  448; y" O( v( Q, k" r3 k7 L
    , K3 U9 y: V; T# g/ N
    12.1.1 设计目的  448
    * |$ I4 m, F. w% M3 e  L$ `/ j. L* e  k) a# b7 t
    12.1.2 ngx_http_upstream_t数据结构的意义  450  F9 O1 k% [" C+ t/ l, R  R  P& t
    $ o% p, `: l& p. e2 R% p! v# Q
    12.1.3 ngx_http_upstream_conf_t配置结构体  453
    , j) ^3 R, L5 ]+ I7 j: u- {& ?1 q& o3 ]7 g, _
    12.2 启动upstream 455! i. k1 ~2 o* u$ m2 \; g

    9 }' _7 D8 g# C9 T- n0 D& L12.3 与上游服务器建立连接 4579 Z9 ^8 Q. L: T# J  t

    8 u+ b7 Z5 t) c/ N5 b/ Y) L/ s12.4 发送请求到上游服务器 460+ W3 U: a2 K0 `6 a
    % g: U, e) R: C8 e2 q7 _0 Z* v
    12.5 接收上游服务器的响应头部 463  ?$ J* V% E$ @3 c5 a6 n: @

    % Y" y; Y3 c) g7 F* F& a( A6 W7 _12.5.1 应用层协议的两段划分方式 463# d- S9 {) v  h

    ( j( n2 \& }2 `( F) `/ B1 c4 M( v3 S) o12.5.2 处理包体的3种方式  464$ \. ]% z0 ]; D  G7 {2 g1 y
    6 R+ u" y( E! x' i- W) f
    12.5.3 接收响应头部的流程 465
    3 {# v) T( X# M9 W% @' G; o
    , i8 J/ i  ?( X8 A% c12.6 不转发响应时的处理流程 469
    5 }* z9 U: C2 M$ D
    8 q% T# X8 k! _0 @1 N, r4 y12.6.1 input_f?ilter方法的设计  469
    7 o1 }) t! ^2 U( h: L; ~
    3 L" j9 F- E9 k2 g1 y7 C12.6.2 默认的input_f?ilter方法  470
    0 G) |% T8 i+ w8 l1 r3 ~% B3 ?
    12.6.3 接收包体的流程 472
    & \2 `5 ~1 P& e( x* L6 S% o
    * U+ c7 R# M/ g" J/ Y3 ~12.7 以下游网速优先来转发响应 4733 [- _/ [) g6 ^4 z/ d: K
    ' \& L) q' ^( z/ z5 l# w" U3 j: {+ c
    12.7.1 转发响应的包头 474; U5 D; u: C0 t* u* G4 \/ ?6 n. P. K- x
    ) S% F- a# k" K7 W/ ]# c
    12.7.2 转发响应的包体 4779 |' f1 y( z" Q3 @/ g5 M- Q: h0 [* u

    ; R' }5 B! Z6 J. W12.8 以上游网速优先来转发响应 481
    9 F5 S/ a$ o9 L) ], _. V* w# s* s+ ]4 T' ^3 `; q+ L, C
    12.8.1 ngx_event_pipe_t结构体的意义  481" }: H* Z% B: p6 O! W: |0 q

      k1 ~1 s* N' e( _: f6 F) Y. }7 ^% a3 W12.8.2 转发响应的包头 485
    ) f5 w. O; ]9 P& o5 N0 C* x: z4 f7 i6 d( Q! N4 ]
    12.8.3 转发响应的包体 4873 y4 X# d- I6 J& l6 l

    2 o+ g- L- \! |- x  R2 q- d! P12.8.4 ngx_event_pipe_read_upstream方法  489
    / x6 S; b: _  Q' W1 Y' \0 F
    8 O  t8 t8 e: G% f* a. x, j12.8.5 ngx_event_pipe_write_to_downstream方法  494
    & \% S& Y8 y' p! k2 b
    1 z1 ?- e: W, |4 G- Y12.9 结束upstream请求  496
    * T8 V1 r- d* T# ~: j3 |& Q" Q! N  }- H0 i2 `" a4 K' {2 a
    12.10 小结  499
    + p7 F1 U0 _% P" n$ L" C; Y6 k. ]& R& a, p0 E7 P! j7 q" D
    第13章 邮件代理模块  500) P6 O' a/ U- U* M

    0 U: p' u* W1 M9 w) j) y13.1 邮件代理服务器的功能 500
    ( C# a, q% G& K- K. t+ L# c. t' c4 Y/ t0 V  T: I
    13.2 邮件模块的处理框架 503
    $ _, w' p. x, K, X4 F5 i) V
    9 s" V' n4 e6 b( p- j13.2.1 一个请求的8个独立处理阶段  503
    ' j9 w* T8 c& G, F6 Q* d: B* M
    9 d' L' B8 U% G7 D! p1 D13.2.2 邮件类模块的定义 5040 S5 q/ W; l- Q7 h1 _! F
    5 w5 [3 {/ T" v! ^3 l0 j
    13.2.3 邮件框架的初始化 506) m: Q8 @+ M) z; A; `5 R2 q# [- [

    4 F- i( N9 R) P6 r# h4 v5 v; [13.3 初始化请求  506
    $ p/ U1 ~' d9 d4 v- j
    ' j1 G! {/ s- l8 }% l13.3.1 描述邮件请求的ngx_mail_session_t结构体  506
    ( T; @! |3 a/ I2 w4 H2 P3 I
    5 |. e  g5 d* E4 W1 I3 K13.3.2 初始化邮件请求的流程 509
    + l# Y( B% e/ E" T6 A; y4 \/ Z& u; }1 X% m2 W
    13.4 接收并解析客户端请求 509& j8 Q, R, b* X" C& ~' G8 I
    5 K5 ?4 \8 t6 e4 \- j( U
    13.5 邮件认证  5102 J9 M$ i. }! h3 ~
    ; y9 [- p; b5 ~: X2 g# r$ t
    13.5.1 ngx_mail_auth_http_ctx_t结构体  510. H' H) B  i$ T

    / B8 D" W, E, r( v: R13.5.2 与认证服务器建立连接 511
    ; l+ G8 O. a. I* D3 E0 b  Z- h. H9 _. _, r& D( |
    13.5.3 发送请求到认证服务器 513& @' ?9 c: c) X# L8 j# G
    # h/ b' Y6 a8 a) F+ ?8 {$ b! G
    13.5.4 接收并解析响应 514
    + C, u# G5 B7 h& }0 x* a4 ^  @' C) T/ F7 [7 N; u# W; w3 y) r, G2 S
    13.6 与上游邮件服务器间的认证交互 514$ u$ G) J" l) n* R& P; ]4 b& a4 l! H

    6 e7 C6 F5 N' ~" X7 j, n; Y( ^13.6.1 ngx_mail_proxy_ctx_t结构体  5160 o% _3 y3 r% W3 ^% j  Y' V: f
    ( h; g: T% v: F/ z
    13.6.2 向上游邮件服务器发起连接 5165 i; a/ u, ?/ q7 Y4 @9 P
    * f  d4 r0 q5 G6 _; d
    13.6.3 与邮件服务器认证交互的过程 518
      N* f: f/ Z$ z3 B. s* f) u' f4 G6 O# s$ k' \+ z% w
    13.7 透传上游邮件服务器与客户端间的流 520
    ( r4 F: i+ r& O! u6 S0 C/ h4 Z2 u) G5 a8 \& m7 w
    13.8 小结  5247 h7 P7 b# w* p

    6 |/ z/ A' ~8 z; H- z第14章 进程间的通信机制  525
    9 _# m5 G% S0 i& l3 ]9 _9 I& N
    * G% V1 E3 R! m% W" i14.1 概述  525
    8 _" p) x4 t3 w; _+ l( J8 _- t" I; L8 G7 p: D9 ^+ a
    14.2 共享内存  526
    . e2 {' S& @9 N: V4 T& z4 h" a7 h9 @
    $ G# |; S2 }. w7 g  d) ]14.3 原子操作  530! Z- ~7 X2 A/ h4 x: l' Z4 a3 j
    1 x( I8 ~, x: G% z. g  O
    14.3.1 不支持原子库下的原子操作 530
    6 |. d' R9 c; Q6 k' X; P, D: \2 z1 a3 |
    14.3.2 x86架构下的原子操作  531% J, T+ ]( R& u' }7 p/ R* ~
    & s+ g$ l+ i) f' {  c6 Z+ I) i4 y" w
    14.3.3 自旋锁  533: G: P# N) w6 O# `3 W: T# s
    . A/ j3 q0 U$ K" W
    14.4 Nginx频道  535+ f! ]1 o$ l+ z. B8 h% r2 Z2 `

    - C0 N& O3 r- P$ d14.5 信号  538
    . h  i, g/ ?9 O
    , u: m: G% v8 V8 E* M" q2 o14.6 信号量  540# f) ~+ z2 }+ l7 }8 g5 Z
    5 h, E0 E, E' \/ ?2 b% |  o
    14.7 文件锁  541' i+ p: |3 q2 ~0 y# J+ M

    9 }# g: k- n8 x7 d! ]3 K. `$ D5 h2 m14.8 互斥锁  544- K4 L8 L$ @- ~: q; x

    1 P) P* E, C8 i0 a0 `- b- n5 ^- o14.8.1 文件锁实现的ngx_shmtx_t锁  546
    & O4 ^4 e1 `* h, q- ]9 v. N& l3 K/ o6 \0 F( p% ^' _" w9 H/ ^
    14.8.2 原子变量实现的ngx_shmtx_t锁  548
    8 |* A6 x9 L" U2 G" Q5 r" t9 r* b9 k/ y) h+ Z
    14.9 小结  553
    / d8 h4 a  }  A7 E7 }: a* z/ [
    9 y3 Z, W  E3 l% I* c  L1 }/ g第15章 变量  5545 j& p- D4 M8 @8 Y8 D
    & O% k+ X3 ~; o* q; F" S1 {
    15.1 使用内部变量开发模块 555$ y! G2 y" y5 Z5 B4 l

    3 |6 Y, a' t; N8 y- t15.1.1 定义模块  5560 f0 x, h- T  C5 S- m* m5 [, i9 y' k+ O

    8 L6 z; U# n/ _6 f6 X15.1.2 定义http模块加载方式  557( U2 R6 w4 x; D( J# `. n+ V! i& ~, g
    : y+ K% v) ~5 y: M2 J
    15.1.3 解析配置中的变量 558
    1 F0 ]4 E4 S1 T
    8 r1 h) x8 R- u! s# v15.1.4 处理请求  560
    / L# J  r3 o$ ]2 l
    ' f1 e: c$ y: y4 D. x' k+ m. V15.2 内部变量工作原理 561
    9 a3 I, O5 X3 U5 P9 K
    & |% O: h9 u1 \& h% J15.2.1 何时定义变量 5612 X/ s/ P) f: ?# l6 G& u
    9 w3 n8 g/ d5 v
    15.2.2 相关数据结构详述 564
    " l9 h1 S) ~8 ~
    ( c' R: T( o. A* C$ U/ c/ f% e15.2.3 定义变量的方法 572
    0 X; W" }8 `4 w) w; r4 j) F1 e, g  y1 }& |, R
    15.2.4 使用变量的方法 572
    . k8 d; U. X/ |8 h" H! i( ?. ]9 e+ [- c7 d$ B
    15.2.5 如何解析变量 573
    # J& V1 x) T0 _8 @
    # V2 D+ `4 N1 k& V. @  U15.3 定义内部变量  576$ W1 Q* N# j" o: A: F3 _
    / V. z' C2 [7 N+ j. O
    15.4 外部变量与脚本引擎 577
    ( Z0 S9 p5 m" r4 ~& F- J) C$ g
    , W2 @' A# ~$ h% i. j( |( W, S* w15.4.1 相关数据结构 578
    " U3 o8 O$ a0 `1 H; t* s) P" a, S  F9 g
    . s5 u+ O9 c8 Q- A+ M' G+ T' Y15.4.2 编译“set”脚本  581! o& S0 S1 o. F. d4 o5 j  g

    4 d7 o5 y/ S1 V/ Q& H: X: c15.4.3 脚本执行流程 586
    * m3 E! G  X% i* n9 h4 y
    ' R7 T2 m9 P9 `) C, j3 i6 m5 j5 P2 |15.5 小结  589  l8 B9 u' K$ o3 J

    8 J# g% u1 C( Y3 @$ L第16章 slab共享内存  590
    7 ^4 T; w1 \2 n, J' h0 b! e: t* {7 ?' U
    16.1 操作slab共享内存的方法  590( o5 v# w6 R5 ^& X

    8 u9 A) P. e: d. f1 j16.2 使用slab共享内存池的例子  5922 _, l0 f( p) ?

    6 r8 V0 c) b: H16.2.1 共享内存中的数据结构 5937 J0 N% c. e  O' p  o  s

    * _* c* U8 s7 O4 c) Y, G' }16.2.2 操作共享内存中的红黑树与链表 595$ X( W! g8 T+ b  `9 B
    8 m$ k  {+ \6 v; S5 d* ]7 K: G* }3 N% _
    16.2.3 解析配置文件 600, i* J: W) b' J  _+ ~
    " i8 f5 A3 U: s0 o
    16.2.4 定义模块  603
    3 U3 I! v! g- p. s5 P% L9 [1 [9 K+ `8 J
    16.3 slab内存管理的实现原理  605
    , s8 ]5 m. A6 x' U1 H- N, V- d; ~- J% m8 |, r* U
    16.3.1 内存结构布局 607: a# d3 \" P* K  Y
    / a5 Y) |% Q" H) V6 l# V
    16.3.2 分配内存流程 613; U, J& i) A2 B7 c
    5 P" R. S( C' {; E% [
    16.3.3 释放内存流程 617
    $ H- I+ y% l, S9 j) C+ e+ x- \( e
    1 \: Z9 ?& r, R- O5 v* ]3 J0 H8 Z16.3.4 如何使用位操作 6192 R  X4 ?' u( i& _
    : x8 O2 G7 y7 N% N- P. e
    16.3.5 slab内存池间的管理  6247 J" B* H7 A5 D5 C& X: @, W
    & D$ r" C6 S0 V7 f
    16.4 小结  624
    , N  |! c8 K: V2 U, G( B

    " p# t: ~  h- y: [  f) H

    ' u' j9 w* O7 A. |; Y* a' M( C% b$ s/ n# a
    * ?' U0 Y! U6 u. `2 Z! Y
    百度网盘下载地址链接(百度云):java自学网(javazx.com)深入理解Nginx:模块开发与架构解析(第2版) PDF 高清 电子书 百度云.zip【密码回帖可见】20200802更新" L( C) k& p1 m" \5 \2 n
    游客,如果您要查看本帖隐藏内容请回复
    , G& ?. o5 {8 [% o6 e  @
    , }4 d# @4 q! u8 ], r, ?
    回复

    使用道具 举报

  • TA的每日心情

    2016-8-1 14:37
  • 签到天数: 1 天

    [LV.1]初学乍练

    0

    主题

    3

    帖子

    17

    积分

    普通会员

    Rank: 2

    积分
    17
    发表于 2016-8-1 14:40:00 | 显示全部楼层
    我要看分享码22222
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-11-19 22:51
  • 签到天数: 3 天

    [LV.2]登堂入室

    0

    主题

    22

    帖子

    72

    积分

    普通会员

    Rank: 2

    积分
    72
    发表于 2016-8-2 22:17:19 | 显示全部楼层
    感谢分享 支持分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-11-2 09:07
  • 签到天数: 5 天

    [LV.2]登堂入室

    0

    主题

    23

    帖子

    101

    积分

    普通会员

    Rank: 2

    积分
    101
    发表于 2016-8-3 08:15:14 | 显示全部楼层
    thanks for sharing
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-7-7 00:00
  • 签到天数: 17 天

    [LV.4]略有小成

    0

    主题

    45

    帖子

    290

    积分

    普通会员

    Rank: 2

    积分
    290
    发表于 2016-8-6 18:40:46 | 显示全部楼层
    大是大非是否是否
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-17 09:55
  • 签到天数: 9 天

    [LV.3]初窥堂奥

    0

    主题

    30

    帖子

    189

    积分

    普通会员

    Rank: 2

    积分
    189
    发表于 2016-8-7 23:28:03 | 显示全部楼层
    16.3.3 释放内存流程 617
    " h3 L% l% q1 P- I& n5 t" g; M2 C
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-1-19 10:51
  • 签到天数: 198 天

    [LV.7]自成一派

    0

    主题

    306

    帖子

    2724

    积分

    普通会员

    Rank: 2

    积分
    2724
    发表于 2016-8-8 07:58:36 | 显示全部楼层
    thank for sharing
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-10-17 11:27
  • 签到天数: 1 天

    [LV.1]初学乍练

    0

    主题

    31

    帖子

    70

    积分

    普通会员

    Rank: 2

    积分
    70
    发表于 2016-10-17 11:43:35 | 显示全部楼层
    eneneneenenenenennene
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2020-7-25 10:06
  • 签到天数: 4 天

    [LV.2]登堂入室

    0

    主题

    25

    帖子

    107

    积分

    普通会员

    Rank: 2

    积分
    107
    发表于 2016-10-18 14:23:48 | 显示全部楼层
    Java多线程编程实战指南(设计模式篇)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-21 13:05
  • 签到天数: 1 天

    [LV.1]初学乍练

    0

    主题

    42

    帖子

    92

    积分

    普通会员

    Rank: 2

    积分
    92
    发表于 2016-10-21 14:05:49 | 显示全部楼层
    aaaaaaaaaaaaaaa
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2025-3-29 04:07 , Processed in 0.094258 second(s), 38 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表