java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 37151|回复: 376

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66375

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

    发表于 2016-8-1 14:13:22 | 显示全部楼层 |阅读模式
    java自学网(www.javazx.com)-java论坛,java电子书推荐:《深入理解Nginx:模块开发与架构解析(第2版)》
    0 b# c( b/ w0 z0 l# \4 @java电子书推荐理由:本书包括四大部分:第一部分针对初级读者,介绍Nginx关于获取编译运行的基本知识。第二部分针对中级读者,以一个例子为主线。第三部分针对高级读者,这是本书的重点,彻底解析Nginx架构。第四部分针对中高级读者,以Tengine的开源模块为例。4 f- K, C( K6 L, S9 B/ ^% U8 a
    * \) U9 G8 _8 y8 v( w2 l9 ~% v

    4 r7 M- ~. t8 K' U5 S( t- [7 d作者:陶辉1 A. ?: e5 K& i, N2 Y
    出版社:机械工业出版社
    : G  F5 f! S. W出版时间:2016年2月4 q$ H2 P0 b% `

    / h8 I; e% ]/ f( O' W2 L) a! z( q

    - N7 J6 ?5 Z+ }) ~* _# ~! J1 r0 L QQ截图20160801140226.png
    ' d3 L) k1 \% p0 C+ P7 n; m0 g1 e3 Z2 I8 b& O! V

    ) Q  g2 H8 j5 }2 j  mjava电子书目录:
    . J4 I. J1 E8 Q* h3 w
    ! ^- _$ x" W1 H& {* f! [- a

      V9 _7 ^# }  [- Q. n) ]# L前 言
    7 E  v/ W3 j: d, t- \$ I/ I2 b* L% q) {% G
    第一部分 Nginx能帮我们做什么
    + s+ O5 B' Q# T7 G, v9 J. Q0 d  M# h/ X" `! G! ~
    第1章 研究Nginx前的准备工作  2
    : y% O2 ]  c& B9 j# @* Y
    : n( T$ A7 `, p4 o2 w4 ^1.1 Nginx是什么  2
    / [# M# m3 D' ^* k3 q4 s
    # ]' Z$ I# P1 H1.2 为什么选择Nginx  59 U$ m" i# V* ^% N( d

    3 p$ ]: o" c( g  d8 X0 Z1.3 准备工作  7
    , ?1 f0 W" k2 Z8 w: F, U9 r6 q: V2 E0 c: B- O, N
    1.3.1 Linux操作系统  79 s. M$ {% M. Q( k( w0 C

    5 i$ A7 L7 m1 r0 r4 s6 m1.3.2 使用Nginx的必备软件  7
    ) K$ n" i4 N2 t/ C4 t" b. _
    ' q) k  [' t9 V! b" V1 k$ `1.3.3 磁盘目录  8
    + Z8 s0 |$ t* N( o8 |  q6 |% a( x/ `- d( \0 g* \9 E7 e; e( C8 z
    1.3.4 Linux内核参数的优化  94 ?/ N8 `, ?0 D: Y1 H

    ' K0 Z  ^. P8 x. C9 W1.3.5 获取Nginx源码  103 Q) m% q+ B5 I; f
    - O* s$ C. d0 T" t7 @2 N
    1.4 编译安装Nginx  11
    6 B, V- q5 t0 x4 R# [; \1 A& T3 x; k7 F
    1.5 conf?igure详解  11
    $ D* o8 d# e) A$ c2 R1 l* H5 P" L/ V3 z/ W, `
    1.5.1 conf?igure的命令参数  11/ S, M) E- b2 n$ w9 y8 `  d
    * h4 P8 F! i* X. P$ _( ]
    1.5.2 conf?igure执行流程  18
    0 G1 y7 l3 J, S% `
    # Q( H7 [% Y5 j* ]1.5.3 conf?igure生成的文件  21
    + L: v9 o$ u' T* y0 g, s& G7 r4 a. w! j  x7 |  t
    1.6 Nginx的命令行控制  23: M# \( X4 ?4 i

    & D: o$ d. U, x, K* x- _4 f" b1.7 小结  27
    " [/ p# H0 Q' ]; B) v
    * J& S' J: k4 h0 X# R第2章 Nginx的配置  28
    , h6 N3 {* ?( @0 G! z* ^. S8 N6 N& B) @/ W; ^5 W
    2.1 运行中的Nginx进程间的关系  28' `# b4 D0 e' T2 D* i( n

    6 K$ B" h' k$ E9 E8 @. D7 ]7 |2.2 Nginx配置的通用语法  31; F3 L% f& }6 J
    % i. O1 r( a! B2 N4 d9 o: p. `1 G
    2.2.1 块配置项  31, t3 s$ l' \' }0 ]9 n. b0 w
    4 j- R4 D* z2 }
    2.2.2 配置项的语法格式 32: g! k! Y1 `: z3 w: z4 x

    . o$ \- \: k+ Q2.2.3 配置项的注释  33
    0 o9 [5 {2 u5 n  ~) g1 F/ K' Y3 D# r
    2.2.4 配置项的单位  33. \, E3 g) K6 q6 e& B- Y

    & X3 M! J* P2 Z: ]) C* X8 A$ l; }9 G2.2.5 在配置中使用变量 33; ~2 A; I8 Z+ |
    5 Z* i3 ~8 q0 Q0 l$ e+ B" o
    2.3 Nginx服务的基本配置  341 v3 |  c) j, D! g% K
    , o  W8 b8 r$ F, T" k9 E4 u
    2.3.1 用于调试进程和定位问题的配置项 34
    % b3 K4 l5 w3 ~- n% H/ Q: I' l( o" g2 e& i, F1 J
    2.3.2 正常运行的配置项 36
    ) {6 N7 a; I1 [5 B4 s; d) y' ^5 h
    2.3.3 优化性能的配置项 37& P: @) L0 H! r# [6 F
    ' x. M/ |' q! ~% P
    2.3.4 事件类配置项  39
    - A4 I: I5 y- W6 S6 X3 N  V5 N" x4 r7 b
    2.4 用HTTP核心模块配置一个静态Web服务器  40# b9 r* K, V8 x! c

    0 F/ C# B, B: K$ r2.4.1 虚拟主机与请求的分发 417 }+ l/ B3 J* b8 G; j& ^
    + z8 F& p/ H  m% [
    2.4.2 文件路径的定义  452 q5 K2 w0 _/ {& g
    1 k8 E. {& f2 T8 p+ H
    2.4.3 内存及磁盘资源的分配 47
    , i, I, v0 q; K' m
    ; O, b! n: L% h2.4.4 网络连接的设置  491 s; N  g4 x2 `# G
    " }/ l/ Z! n; _% m6 R
    2.4.5 MIME类型的设置  52# n+ ~, _  J. T; i0 @( K
    2 V8 l: s/ w0 Y; e
    2.4.6 对客户端请求的限制 53- r% v) J- [) r- n
    5 W" B1 M6 w4 w( c. B% P2 I
    2.4.7 文件操作的优化  54( W, y) [0 j: g6 }0 ]* R8 k
    & f+ O) K6 E5 y: u6 R, Y
    2.4.8 对客户端请求的特殊处理 56" P& _1 u- j$ l" ]+ n. ~' _

    & }) \1 M- i- {1 s  P( g2.4.9 ngx_http_core_module模块提供的变量  57, q, B0 X3 W$ M6 }

    5 X6 V5 M1 x" V. X+ D: \1 u2.5 用HTTP proxy module配置一个反向代理服务器  59
    4 k: c6 v, F! ^! q  v3 x; ~
    1 u( o' U2 G' _, F2.5.1 负载均衡的基本配置 61( D6 ]) u+ O9 J- ^0 {$ d- K

    + [% d) @& A0 B9 L7 y2.5.2 反向代理的基本配置 63+ o0 i9 L2 p8 t: i5 E! m
    9 U) t0 M8 d1 y# y( P' i
    2.6 小结  66
      T  X* e$ s2 g) Z* r  C. c) o8 i9 q& }2 h" M; A/ s. N
    第二部分 如何编写HTTP模块$ L4 z0 M* V( q8 [

    ' X- ^+ B% t' h; ?) ]. ^第3章 开发一个简单的HTTP模块  68
    " y; S! c! y2 \3 L3 [$ S
    + m  ^: ~+ v( e. c1 M/ w# J3.1 如何调用HTTP模块  68& D3 n4 B0 v  G* s4 }) K

    * a& s8 C; P& U) }2 C7 m3.2 准备工作  70
    ! F' U6 T3 {9 m; N" b  B4 J3 F7 Z/ Q7 S
    3.2.1 整型的封装  71
    : `# L$ V% h, e2 C( C2 K/ @3 H- F! l4 x3 `" L2 `. {
    3.2.2 ngx_str_t数据结构  716 m6 u0 m% R5 P) W0 Y4 i

      Q# G' a, o! [) v2 r  f" N4 E. K3.2.3 ngx_list_t数据结构  71
    1 N8 C/ W6 l# H4 R' d( S  q& g1 B9 E; G
    3.2.4 ngx_table_elt_t数据结构  75
    4 B& c7 p3 M  y; D8 U! w  m1 t# o' L' X, ]8 S. T9 W$ z
    3.2.5 ngx_buf_t数据结构  75
    3 r' D0 C+ O0 X5 I8 I
    $ E( Z6 B7 i9 |' O  f3.2.6 ngx_chain_t数据结构  77
    . q) `6 p& d+ `# w6 U7 J! w1 Y' J
    3.3 如何将自己的HTTP模块编译进Nginx  77- K8 J/ `( H/ f: z
    / z) \0 g$ g; u$ I9 u( ~9 ]- c
    3.3.1 conf?ig文件的写法  77$ ~9 R% W+ N' k2 a
    - j& o- ~$ M2 {3 s3 l& j) L
    3.3.2 利用conf?igure脚本将定制的模块加入到Nginx中  78
    - q: a8 G' o2 x6 x9 C; }
    : r+ \! ^2 ^, r; z. i3.3.3 直接修改Makef?ile文件  81% `0 ?& B4 `& c8 b1 g. e
    4 d/ C% x  B) q& W: n
    3.4 HTTP模块的数据结构  82
    , b/ l+ L: R& k# m: d: H5 J
    - ]. i% x' h6 }+ y- {  ?3.5 定义自己的HTTP模块  86
    ; n; d+ v% }0 s" L: m0 k4 A# \; q, X3 b( R; b# ~
    3.6 处理用户请求  89
    4 e: E$ a. w' {8 `7 h& r
    4 }- T: E5 u7 [  }! Y. J3.6.1 处理方法的返回值 89: X% Z. ?7 {0 d
    : ~8 a* u0 y6 E
    3.6.2 获取URI和参数  928 X5 Q8 i7 P' F
    9 i1 }+ r; f0 u+ O1 t; N
    3.6.3 获取HTTP头部  94
    : c3 v* u, h) E2 L" S4 e3 }
    8 Y( S2 O0 d' {/ ?3.6.4 获取HTTP包体  97
      S9 [$ U4 v& B6 D' x, n, f* B; a5 a) a$ s/ o; K. X
    3.7 发送响应  99
    " Z8 Q0 v2 w& N9 u* F8 R
    . n' B9 G! Y' o3 G9 ?; V: I3.7.1 发送HTTP头部  99. N; j3 [7 j; c* o* Q3 \! z
    9 Y* s  f& E2 A
    3.7.2 将内存中的字符串作为包体发送 101
    . q  R, M& O0 o: K1 u! p0 ^5 }" w) ]6 R/ o. {5 M% T
    3.7.3 经典的“Hello World”示例  102
    7 s/ Y7 ]; r! Q/ n6 _7 L8 E
    + o: m/ Z* K. T# |3.8 将磁盘文件作为包体发送 103! @; p7 J5 W. d/ G0 d6 d
    9 W; S! o2 j4 d
    3.8.1 如何发送磁盘中的文件 104; Q1 z+ }" N: ]$ C7 M
      l$ y& E" Q: D% Z& Z7 @* C
    3.8.2 清理文件句柄  106
    " M% H& ]+ K* g$ ]6 m! R, j8 z& t7 W
    4 u/ v" o. B: _( s' E' @2 R! P3.8.3 支持用户多线程下载和断点续传 107) B" e  \6 V# C6 Q( w$ x

    $ d8 B7 Z/ Y4 g8 G6 B- ?3.9 用C 语言编写HTTP模块  108( ~, x1 U7 {% S, B

    5 Z2 J  I6 g; w; R# p3.9.1 编译方式的修改  108
    / u* }0 t9 H1 S& l! e7 X  [$ s, Y4 J$ i
    - L: z6 C6 N$ A3.9.2 程序中的符号转换 109
    6 N- s8 J, c/ q8 V
    8 K2 s" r. ^+ g3.10 小结  110
      m% P' D, Q$ {8 X5 Z2 b: p! z4 P- U4 }) S6 a9 ?% u5 O
    第4章 配置、error日志和请求上下文  1116 {: Y- ]$ w' B; L  }

    7 X( I* F/ Z% j$ ~5 Z, m' {% a2 P4.1 http配置项的使用场景  111) A8 i: x( q) k; u0 z
    8 W, P% ?" ^3 M0 [$ a
    4.2 怎样使用http配置  1130 ?7 `  W) u7 O4 l) k. H6 U$ B) I
    0 B1 t+ P- i7 I; h9 e
    4.2.1 分配用于保存配置参数的数据结构 113
    ! L" d7 O% d! U4 {- Z( E) ~# t" s3 U# V0 i8 x& z4 m' a# i
    4.2.2 设定配置项的解析方式 115
    6 P8 A; D8 _$ O& z0 D5 }1 A* B/ d. d% v2 N$ A! W
    4.2.3 使用14种预设方法解析配置项  121$ J( Q# p, d0 M2 G
    ( Q, \0 ?; J4 o2 e+ z: B6 M
    4.2.4 自定义配置项处理方法 131- Y, \* J& A2 f. z% j/ W6 V

    # F8 n% I. f4 x4.2.5 合并配置项  133
    # X& u) C) k, Q% c. y$ m3 R
    5 {, q3 c2 R3 G' Z4.3 HTTP配置模型  135
    ) q* K* o0 @0 C( u
    " J0 l6 I) d$ O/ g3 _0 G4.3.1 解析HTTP配置的流程  136" }! ^& j& f* q) I; |

    8 f- ?! f1 Y( r. }' ]. Z( p3 ~5 k4.3.2 HTTP配置模型的内存布局  139! @7 @" l0 ]/ x6 R4 O. ~. C  x- ?
    7 O" o! s$ `7 @9 n
    4.3.3 如何合并配置项 1427 u6 v) _  D) b( U

    3 w" |) t% R6 @" g: A4.3.4 预设配置项处理方法的工作原理 144
    " t& i# }( [8 Z. c0 k" M  e: W4 u- h1 G
    4.4 error日志的用法  145
    7 v* l/ E6 K+ }$ S6 ?/ y& e+ V* v0 q: {* q, ?( d4 n
    4.5 请求的上下文  149
    8 z6 j/ f; `3 f9 ]8 A4 t
    ' Q6 a+ ]( d* O- n' H- h4.5.1 上下文与全异步Web服务器的关系  149
    7 M% s9 ]3 ?8 t! }1 i
    1 D3 R. ?& f; j% ^4.5.2 如何使用HTTP上下文  1516 f2 q* O! M2 `( f* B

    9 u4 p) _3 p9 j* A: K4.5.3 HTTP框架如何维护上下文结构  152$ x/ U4 J: z7 f1 Y

    7 B# G9 ~$ c7 x1 P$ I9 s4.6 小结  153
    * M; `- W. v7 O, x' B
    * w  E& Z. p1 w* G9 t第5章 访问第三方服务  154
    + S" I- _0 i& g" W6 Z' ~; m9 j: c# d' B& z- {8 i
    5.1 upstream的使用方式  155
    0 k! Y2 Q' V. f9 E# x! t8 ?8 n- ?, G* N% w7 x, b8 f! }* y
    5.1.1 ngx_http_upstream_t结构体  158$ Q# }( f& v, T& G; a; G2 h5 C

    ! |4 C& n6 V& ~5.1.2 设置upstream的限制性参数  159( ]& P# r) K; V
    # C  J( ?' ~" j$ B! A
    5.1.3 设置需要访问的第三方服务器地址 160
    9 N0 R5 ~' \9 I2 E
    & O; F0 f5 n+ |+ D5.1.4 设置回调方法  161! n( P" F1 ]% L( a
    - Z2 k! p" ?* A. H* q5 M- M7 W
    5.1.5 如何启动upstream机制  1611 C# p9 A" v) ^, _; o8 X+ r

    4 [' m  r# ^2 G) q4 I8 }5.2 回调方法的执行场景 162
    # J0 N0 |, z- R) i- S& e9 k7 [' ]9 |" z5 T% d  x" F
    5.2.1 create_request回调方法  162, G7 b; W8 _# l; g1 @

    $ H* n. {6 |( ?/ S8 W5.2.2 reinit_request回调方法  164; L2 v, q( h( m- H4 k( m  Y
    1 v- f# Z# j" O4 Q2 N$ W; m" n
    5.2.3 f?inalize_request回调方法  165. o7 F7 W6 Y( Y5 `- T1 `/ {0 T" V

    & `$ E* U# g! p6 F8 l5.2.4 process_header回调方法  165% C# y& @# O7 X. m) x# G7 e3 ]
    - `9 ]" X$ _# p7 Q5 ]9 O
    5.2.5 rewrite_redirect回调方法  167
    * g& J% H9 R* a' O' T
    + @# [" `( q0 |3 y4 F: d/ h' s5.2.6 input_f?ilter_init与input_f?ilter回调方法  167  @3 D" P( p7 l+ `- h: y

    * H/ y& I5 s1 [* g3 A2 {: q% Q+ v5.3 使用upstream的示例  168
    # I' ]& B- Z- R
    0 J8 {& Q( g0 M5.3.1 upstream的各种配置参数  168
    / I0 @$ l) K' W
    1 u, G8 `( w0 A" g3 J5.3.2 请求上下文  170
    ) _# F" G( V: H5 {7 S
    + C8 z8 L. x5 y4 {. {5.3.3 在create_request方法中构造请求  170
    ) k4 i5 N8 \0 v7 P2 F: j) d, L6 x/ J* \" ^& c
    5.3.4 在process_header方法中解析包头  171. w& F- T6 m6 n( K4 H9 X2 o) U1 l
    $ L+ _$ V; x- {8 G' ~
    5.3.5 在f?inalize_request方法中释放资源  175
    2 V; x# ^9 j8 J) S8 p- k$ N7 V; O) N/ z! {
    5.3.6 在ngx_http_mytest_handler方法中启动upstream  175
    * i1 h2 \6 `. N7 Y9 w9 r3 b. S
    0 @' B" z# X6 L5 V5.4 subrequest的使用方式  1770 S  Y2 ~6 v% v
    6 P" b, }0 \9 n8 {/ P
    5.4.1 配置子请求的处理方式 177
    $ o2 P8 o3 P* e7 j' Q( {6 S" Q0 [
    5.4.2 实现子请求处理完毕时的回调方法 178
      x+ z# L% N% P
    # R6 @, R% c. g$ W6 n% P( v+ M5.4.3 处理父请求被重新激活后的回调方法 179
    ' K* E% {+ I& i; t- T, j$ `. U
    % K/ D5 Z: W" q0 m. N7 F5.4.4 启动subrequest子请求  179
    # Z0 Q$ I- ^' ^
    + s7 }  C+ G' a/ M5.5 subrequest执行过程中的主要场景  180
    + u7 W, s1 A0 |) Y7 {6 Z; D; Z" T
    5.5.1 如何启动subrequest 180
    & y/ N; q4 U1 O5 ]3 a, r5 T1 L+ \9 G9 ]& j' R; K8 ^
    5.5.2 如何转发多个子请求的响应包体 182  o9 E# ^& O  G! A8 l1 i
      I* C8 w5 `1 E8 O  _; y
    5.5.3 子请求如何激活父请求 1856 I+ B) |* t# T2 v4 W
    + ~# l% p# W+ C7 o" w9 z3 A) H
    5.6 subrequest使用的例子  187! z- V9 W4 \6 n8 q5 X

    ' k, m! q4 s$ A% Q9 B" T5.6.1 配置文件中子请求的设置 1871 Y2 L7 q8 Y* n0 ^9 P9 ?1 Z

    ( }& l0 w4 s$ z/ s. F1 v; v5.6.2 请求上下文  188+ }" z+ S0 e2 e/ s: a7 d/ x# u
    1 K6 P( R% r9 U2 d
    5.6.3 子请求结束时的处理方法 188
    : ~# \/ t+ h+ F3 I: E3 c# O
    " d1 j7 E7 i: L& x/ I5.6.4 父请求的回调方法 189
    ' V0 w4 E& U" K- A  L- D/ _4 m) n1 U1 Q1 k
    5.6.5 启动subrequest 190) U9 f4 W4 S% A; B- r( Y: z
    1 e' Z8 q7 W9 k" M2 I% U
    5.7 小结  191
    , L+ D9 [1 {, ?& W  l0 h
    ; a- g% T/ U) _8 J第6章 开发一个简单的HTTP过滤模块  192( x1 H/ d: b3 m) \
    ! |/ A' q7 I* y
    6.1 过滤模块的意义  192
    ( r6 Z; D1 ]# k0 C* F$ {8 C; d- v+ [" ?0 J
    6.2 过滤模块的调用顺序 193' _; \4 M; N: @. o5 G

    $ r2 V, n, f8 Y( _. l6.2.1 过滤链表是如何构成的 1943 l9 e+ [! ?2 y' w/ n8 D$ `4 y; G4 ]
    , s( v* Q* g: q- o4 E
    6.2.2 过滤链表的顺序 196- g  |1 f, T1 r1 q

    & I7 `. z. M- M8 i5 S1 A0 b6.2.3 官方默认HTTP过滤模块的功能简介  1975 N7 u5 ~1 n: A7 S$ ?( s" r

      @' _( w# ]; J+ E! {6.3 HTTP过滤模块的开发步骤  198
    & `0 N, B- t$ W0 \5 E8 C( j" x
    3 ~* P) S3 n$ u1 k, F, e! D6.4 HTTP过滤模块的简单例子  200, H& n0 J4 {! u" C, ], @, _

    ' M! L3 U* m3 V0 d- i/ |$ g6 [6.4.1 如何编写conf?ig文件  201
    # ~: H: Q1 L9 ~3 C# d+ K  ^: f! U9 @9 v) Y
    6.4.2 配置项和上下文 201. z8 |  Q9 u; F8 C( `% `' K
    # f& q/ I: K9 D0 z; R) e9 P: t
    6.4.3 定义HTTP过滤模块  203. H& K. y# p) c* |  o
    8 E4 {1 q4 Y5 M- U5 _( F" N
    6.4.4 初始化HTTP过滤模块  204: e6 _, F& L+ r) {4 R' v& a2 x
    " c* o8 t( a  [+ B6 t: y! D
    6.4.5 处理请求中的HTTP头部  204* k, G* z8 r- }" z( W

    - I0 J' A7 `* ~9 _) N) w0 f% L6.4.6 处理请求中的HTTP包体  206
    . a: h: K: u! d
    + A5 E. Y. r% v7 g, T* A6.5 小结  2060 W- E: I  o, X8 H' L' m9 ^5 c

    , m, p3 v3 [4 f& U) q第7章 Nginx提供的高级数据结构  207
    - a) A; c1 X; G4 L$ d5 d% E; E' N0 y% A' \
    7.1 Nginx提供的高级数据结构概述  207# B6 C/ |0 j9 p# q. i

    * n# [, U! F. Q5 `; A7.2 ngx_queue_t双向链表  209
    % A" R* Y4 E. e
    - i7 t2 m' y- ?0 M: ?7.2.1 为什么设计ngx_queue_t双向链表  209
    + ^4 `4 n3 M+ e: D: T7 W! H
    8 m. V1 d; ]' X- c' I; e7.2.2 双向链表的使用方法 209
    . [. _+ s: u# W3 E8 @4 C8 r  r0 }5 \! ?$ e8 ^, T; A: W+ s3 I
    7.2.3 使用双向链表排序的例子 212: Y1 D/ A2 X) K( s
    7 f% ]9 [( Q# ~! K
    7.2.4 双向链表是如何实现的 213
    4 e8 l/ {; y# A( V& B
    7 Q, W* |& |; `9 X7.3 ngx_array_t动态数组  215
    * E. P& a" L  S! s+ M3 W" v
    7 T; E! a+ V3 o+ F7.3.1 为什么设计ngx_array_t动态数组  215* q/ V5 s# |& O( Z
    3 q" ]4 p# v  B
    7.3.2 动态数组的使用方法 215& h% ^" W* ?* @# i: i( Q1 X  J
    6 Z, O( O' ?0 C7 z
    7.3.3  使用动态数组的例子 217) l4 C( B6 {0 p# U: k5 L3 F

    + Z3 I3 @# v, {7 f7 l7.3.4 动态数组的扩容方式 218
    $ Y" o0 W' n7 ]/ j9 r  {1 Y  b  w, T- N+ H: C. p2 F% }7 c. D3 s
    7.4 ngx_list_t单向链表  219; k4 j. ~" ?* m0 J5 I

    % S7 c( C+ D+ v" K: O+ ~, ^7.5 ngx_rbtree_t红黑树  219! C+ o7 T7 _% v* ^; j* o/ b/ [

    4 C+ z# X+ e7 v3 Q7.5.1 为什么设计ngx_rbtree_t红黑树  219
    7 J& P7 j2 l* O, m$ c3 f- d9 d# a7 c1 j& K
    7.5.2 红黑树的特性  220
    / f7 T; g+ t6 b. h' {' g: V# W& [( e. _6 `5 e
    7.5.3 红黑树的使用方法 222
    8 H- k* j0 p* ?+ E$ e
    ( j+ o) U. [& ^8 o1 E5 e+ c; J  ]7.5.4 使用红黑树的简单例子 2252 ]+ G5 s  k+ ~9 L/ K7 H8 @- i: C

    6 h! Q0 s% G% w7.5.5 如何自定义添加成员方法 226
    & g' M+ @  W0 g& X$ ]! h. N5 h  |! E7 V2 e( F
    7.6 ngx_radix_tree_t基数树  228) C8 V) x7 [- |, W/ I* ~- B

    2 I8 n( B# ?0 |$ V  ]  X- m: @* R7.6.1 ngx_radix_tree_t基数树的原理  228
    7 S% ~$ n1 V0 V" `6 K6 O# _
    5 U, d$ o( k. [7 ~7.6.2 基数树的使用方法 230
    ! y* X# t) ~9 F! `* z5 u$ J% g) i+ j; u! p9 y
    7.6.3 使用基数树的例子 231* k8 O' y: F% o/ [! d. Y
    ; y, u& k; }6 f- }' K7 z; K4 d
    7.7 支持通配符的散列表 232
    , [- r, y- V& B$ t& n- A7 o7 n; s3 ?" L6 X+ ^! ?7 P! l0 d. [  b# \
    7.7.1 ngx_hash_t基本散列表  232- s( E) U4 F& }  s2 F0 S: r

    . i8 p2 b/ B, F; [7.7.2 支持通配符的散列表 235
    + G. r+ ]- c! l( c# I. Y  h/ c# a. w0 l# q2 w# d
    7.7.3 带通配符散列表的使用例子 241" Z2 k7 Y4 Q. l( W4 R

    7 K$ ]5 K! F: o. l8 K; z' ~7.8 小结  245
    # ]& q& ^' z7 ]% G! F' E' k& W8 \) ^7 ^* G9 R
    第三部分 深入Nginx
    6 |5 h. T0 ?& h" Y9 y: A+ D/ L- m8 r  h& m3 p6 ^
    第8章 Nginx基础架构  248. B8 m5 [0 t. u  @. v5 y. W

    8 p" R" I2 ]. [5 `* g. ~" ^% j8.1 Web服务器设计中的关键约束  249
    : X$ g$ {& I5 g& ]# Q% v+ m- ?9 O, k
    8.2 Nginx的架构设计  251
    4 B& w, i# N% ]! @
    % r6 w4 ~+ ^# ^- b" n8.2.1 优秀的模块化设计 251# A5 n8 D3 e. r& v
    5 ^. T. X! b7 p0 k  E
    8.2.2 事件驱动架构  254
    * l1 h9 b" d9 S$ k& ~, d) W. D1 v4 l2 n+ D7 {, m
    8.2.3 请求的多阶段异步处理 256/ f! V/ a7 w0 t/ k

    ( D: r8 _5 z# k1 X* w8 q# J$ l8.2.4 管理进程、多工作进程设计 259; m! g: h: X6 h$ v
    1 A6 x( B- K0 y% }
    8.2.5 平台无关的代码实现 259
    / w. ?) h9 L4 d  h$ L
    4 ?. U7 \2 C8 D+ ]& N8.2.6 内存池的设计  259
    6 n' D( E% t. e4 i
    + o$ }* A0 G% ^1 }8.2.7 使用统一管道过滤器模式的HTTP过滤模块  260
    / i- S3 T% N4 Z# K* ?9 l2 S: H9 B2 X+ q7 u9 r& |( P* w
    8.2.8 其他一些用户模块 260
    ! g# f7 I! X( z0 r
    4 M0 G+ `: f1 c) m/ }# h2 {1 q8.3 Nginx框架中的核心结构体ngx_cycle_t  260
    3 t# |  {# \! \- Y
    6 A: A" D) ?; m+ j; d* G8.3.1 ngx_listening_t结构体  261; C5 j8 ^! f% K) y( z" J6 M3 i! g9 ]
    % w5 R4 \& F: Y
    8.3.2 ngx_cycle_t结构体  262
    ) f, \% j! H8 t( d" D+ {
    6 E' P5 \: {0 e5 [: V8 ~8.3.3 ngx_cycle_t支持的方法  264' }7 B5 j8 S: _0 l3 O* ?
    + H8 l  s- z' S8 V( H0 J
    8.4 Nginx启动时框架的处理流程  266
    3 ~- \1 R) K* V7 N
    # C8 I$ p. I" o9 Q2 m& u9 J8.5 worker进程是如何工作的  269
    - Z9 W" w+ y$ j6 T0 @. F; E1 k0 _& q5 g. t6 d
    8.6 master进程是如何工作的  2715 s& m$ K$ {  v8 `
    / ?! z0 h& F0 n) t
    8.7 ngx_pool_t内存池  276- t( D, E( g# Y4 a( U( e$ H8 O0 g
    , r( U$ H0 [# K2 Z* Y- D' _0 M( h; N
    8.8 小结  284( w* T# D. U0 X& z+ A+ K

    7 c. L1 a+ T3 ]# x; `: A5 S& U, `! T第9章 事件模块  285/ j4 D# L$ {7 z6 v% [
    8 A7 R" w" Q" M7 e8 J
    9.1 事件处理框架概述  286& w+ \9 u% `0 F  L" Y

    : }. W4 i6 @6 a. H8 W9.2 Nginx事件的定义  2887 P6 b" a0 e& y3 l. Q( W! n: i$ R4 p

    5 }4 @* M3 {& t0 ]- P2 W9.3 Nginx连接的定义  291
    3 F* s- k. [/ n+ _* g1 {* ~7 [# ^  n
    , `- N  `  F/ O5 \" {: C/ |1 `! t9.3.1 被动连接  292
    2 T) E& v& W1 Z1 ^. z
    2 D% ]% I7 i  z* G9.3.2 主动连接  295
    4 t, v2 d$ _( d- j( b' g1 k9 t, P
    9.3.3 ngx_connection_t连接池  2967 f8 H9 T! x* l3 f. W

    6 j& y+ @5 S# @9.4 ngx_events_module核心模块  297
    $ l" _3 o; [9 _0 M2 r. c4 b, _' ?7 A" S; \7 o& c+ ]6 `, e
    9.4.1 如何管理所有事件模块的配置项 299
    ; J6 _8 Q* i4 d4 o/ v# f- S) }9 l4 N+ w* V$ Y* y
    9.4.2 管理事件模块  300. v3 R" _5 j* q; N& E4 L5 b
    # g& n# f9 v6 t9 _9 S# x
    9.5 ngx_event_core_module事件模块  3024 a) g1 `, l' `

    . f: j) ]* p3 ]2 {* ~+ D$ ~9.6 epoll事件驱动模块  308
    4 I2 _' O3 m5 }) q
    5 C  A: z- U% h: x8 N; b9.6.1 epoll的原理和用法  308; `! y0 P3 C4 h: y9 w7 ?8 w8 T
      U( s7 t2 ~1 {" V; {
    9.6.2 如何使用epoll 310
    / d3 O: b2 C+ K  t$ v# z( X' y$ W" |1 U, _8 O' r0 _# A. C
    9.6.3 ngx_epoll_module模块的实现  312
    2 O6 ~5 a) U( K$ I% U' D1 o" ?' p, r' ~
    9.7 定时器事件  320/ {4 x4 Q  D; g) q3 V7 k
    - P' w# w) i9 g5 r- K- J0 ]* o- |
    9.7.1 缓存时间的管理 320
    ) H3 d& Z; Q) K. _& \! c; [+ P
    7 N9 p1 Z0 _. h5 z" d1 H$ G9.7.2 缓存时间的精度 323
    ) e9 \5 ~! |9 W2 t* F$ T
      E: @) g7 @) u, E9.7.3 定时器的实现  323
    $ B' i! ?2 `9 i& f: W4 D/ R# d" |% M% F
    9.8 事件驱动框架的处理流程 324# D, D( Y& N/ T: p
    ) s- X4 j) F! k
    9.8.1 如何建立新连接 325
    ' L* A7 Q" s+ T% X
    6 X7 A; S8 E# A2 v0 y9.8.2 如何解决“惊群”问题 327( W$ a# k$ S7 W$ _, q3 q
    ; M$ Z. z8 s: x7 K* q
    9.8.3 如何实现负载均衡 3298 g+ K/ v8 ]: f8 b2 P

    ! ~9 f; p# i2 B+ b& z5 x* ~9.8.4 post事件队列  330
    4 O/ ?( ^) z: U$ L* s9 H
    2 I) H; y0 I/ D$ M7 u1 L9.8.5 ngx_process_events_and_timers流程  331
    2 o0 d8 T( w6 k8 w6 y$ a) j. e, n4 H( g( D  P
    9.9 文件的异步I/O  334
    5 d: y) \9 M. u9 \, m. F" M8 R: i1 j/ \4 i) B
    9.9.1 Linux内核提供的文件异步I/O  3359 z9 c. n( a2 a5 q: v

    1 x) ?+ s- w+ t: T9.9.2 ngx_epoll_module模块中实现的针对文件的异步I/O  337
    / e" ~6 B5 ^9 D+ l6 t* g) x! q+ e8 l. H, D* N
    9.10 TCP协议与Nginx  3422 x! t; l8 W! b6 t* p
    5 X6 p4 H/ S# f4 B; h4 K
    9.11 小结  347
    3 a  ?6 ?# f; W! J4 T
    3 u/ f# y6 q' J, W第10章 HTTP框架的初始化  348
    9 l- @2 i# ?0 \4 V* j& j
    : t! r5 ?4 z9 t. m( ]; Z9 {10.1 HTTP框架概述  349
    & D9 X2 H8 m; }7 t  T6 j+ h
    7 l/ `5 b5 @8 i/ w- x10.2 管理HTTP模块的配置项  352
    9 i7 h/ N9 ~7 _. w* u* I" `" n
    10.2.1 管理main级别下的配置项  353
    2 N8 U: a: o! Z% J  g! b& ?9 V; a0 O0 b7 ?* W
    10.2.2 管理server级别下的配置项  355
    0 m1 r4 y7 Z% J  Y4 i) b
    / d# _$ ]1 R8 O- |' ]( H4 v: W10.2.3 管理location级别下的配置项  358
    2 i9 }5 E& H' E. [# A. B  k/ V$ ~, T  }- Y
    10.2.4 不同级别配置项的合并 364; t0 N' n, E2 c: q
    1 l  z1 W6 d- u: _! i: g9 g' k
    10.3 监听端口的管理  367' z1 t. m, D1 u  d  ^
    . V7 \4 J" L2 T/ E
    10.4 server的快速检索  3706 x- [, Q5 g( A4 N& O/ U$ H9 p
    6 L* l$ v6 z9 q: n9 E% R9 L+ V
    10.5 location的快速检索  3707 O* Q  U( N1 M
    1 t3 U/ d# N2 m5 I6 O# N8 L" Z9 E
    10.6 HTTP请求的11个处理阶段  3727 t  I& g8 h  i9 Y/ N! X4 T0 g: E
    4 X- Z( w' s3 S, j
    10.6.1 HTTP处理阶段的普适规则  374
    5 p( a. G. a' Q( F6 y0 Y
    % v3 \! M' [8 I6 a10.6.2 NGX_HTTP_POST_READ_PHASE阶段  375- \0 K$ F, ]4 }( v1 ], H( S) R( r

    2 o  H5 j7 }  z" z2 Q  H  Q! u/ {10.6.3 NGX_HTTP_SERVER_REWRITE_PHASE阶段  3785 W, F% p7 A# }
    $ V6 ^/ {8 ]% y
    10.6.4 NGX_HTTP_FIND_CONFIG_PHASE阶段  378; V' U, K! |9 i0 X2 n$ \
    # G" C% v8 h9 A
    10.6.5 NGX_HTTP_REWRITE_PHASE阶段  378+ S9 p3 h/ b. Y+ Y( E1 ?# P
    $ ?9 H) @7 b! i8 j" O6 g
    10.6.6 NGX_HTTP_POST_REWRITE_PHASE阶段  379; B* ?8 d4 N) ~

    : F' f, p: B1 j/ F" g" W10.6.7 NGX_HTTP_PREACCESS_PHASE阶段  379
    . k& I/ r7 V6 O( ^3 w: `/ _' w/ a* ]7 x' K
    10.6.8 NGX_HTTP_ACCESS_PHASE阶段  379  Z% y& w, O& ~' B* j& U
    , L* D+ L2 u" F
    10.6.9 NGX_HTTP_POST_ACCESS_PHASE阶段  3808 Y3 P) w3 U2 t% O

    2 _2 a0 y' w: i, z: `" {10.6.10 NGX_HTTP_TRY_FILES_PHASE阶段  380
    % e3 H' @7 e8 r+ a! s  a- W% X# w
    10.6.11 NGX_HTTP_CONTENT_PHASE阶段  380# D$ J9 T, X8 @$ B0 X: `! Z0 j8 p- s. E

      R3 }8 t# a& T% H3 P/ A7 W5 C10.6.12 NGX_HTTP_LOG_PHASE阶段  382
    - N2 `# a4 y( b8 I
    : o% U8 y: }; ^+ b+ j" @10.7 HTTP框架的初始化流程  382! ]' n; G2 E7 C, o/ }% q

      S$ o- m/ F' K6 k$ a10.8 小结  3848 B% }8 O8 C9 N; P3 U
    + G6 T& ?2 p# b; L: R$ x
    第11章 HTTP框架的执行流程  385& [1 l" `" `! I: K7 |% [, y; z. ^
    - u, I, t3 f; K# `0 S# w4 C4 u
    11.1 HTTP框架执行流程概述  3862 J# Q1 M% W" Z
    - F6 x3 D8 M) @( W
    11.2 新连接建立时的行为 3873 w6 t" w$ t: S( W3 ?

    9 H6 M8 u, j$ y; _0 Y- f11.3 第一次可读事件的处理 388
    / w, @- c8 c. \1 O' @- G$ X. M9 C& d/ C: q
    11.4 接收HTTP请求行  394
    2 I; t0 R$ f; {+ Q7 q8 J# ^3 Q4 u4 K. t! E1 N
    11.5 接收HTTP头部  398
    5 |5 O! |- A' P4 I9 d
    3 G, q+ r$ L4 r7 B  v. X11.6 处理HTTP请求  400
    " _) i  j) t6 ?! M1 h2 I7 |. V, I5 v- ^# C) `4 r  h
    11.6.1 ngx_http_core_generic_phase  406
    5 S+ i' V/ T/ E1 R& ^8 L4 I; c* g' D5 I
    11.6.2 ngx_http_core_rewrite_phase  4080 @: u/ f8 ~% Y8 f
    ( ?( |9 R+ g6 R1 J: k
    11.6.3 ngx_http_core_access_phase  409
    : q" O/ i; m+ g  S0 b* F- y& `+ h; x# E1 e& d
    11.6.4 ngx_http_core_content_phase  4129 X; ~6 J+ K9 v! B! d7 I* A7 g
    ) P. ]0 Z' O! }: o  t
    11.7 subrequest与post请求  415
    # m5 A4 K  `4 f% i0 ^  d/ @# o1 O' h4 G, N
    11.8 处理HTTP包体  417, ~; @% {3 J0 Z$ E* H, q# q
    + z* f7 x. N$ }' \, _+ e
    11.8.1 接收包体  4199 o2 n5 b+ l+ @+ e

    ! S/ |! t. v- B11.8.2 放弃接收包体 425
    % q6 _) I7 K( @) U  }8 K/ `0 C( [/ D2 @- K/ m8 m
    11.9 发送HTTP响应  4296 c; q0 \) L6 F& G
    1 |5 D. y, o0 e, O6 |( a
    11.9.1 ngx_http_send_header  430
    . j6 t" l! N/ s6 I- }. \* t' Z' ?% T1 ?/ w( M1 B1 i8 E" P
    11.9.2 ngx_http_output_f?ilter  432
    & |1 `* `2 ]  x: O6 h* {
    6 r9 H% p2 t" h. s2 w$ j$ |8 t0 u11.9.3 ngx_http_writer 4357 T5 v# Z! ~# \, N  ^

    # ~8 T& `% B0 u9 h/ M11.10 结束HTTP请求  437- [$ {% L7 p2 J+ k+ @0 n

    4 W) w* O# A# |3 z% q11.10.1 ngx_http_close_connection  438( j! R4 ^" l! C; k& h8 Z

    & I/ [! p/ G$ v. ^+ d11.10.2 ngx_http_free_request  439, X3 f+ r  h- |% S  i* o: u$ d7 S

    , F( E9 t: M/ p9 H: N/ T5 w9 F1 e11.10.3 ngx_http_close_request  440. X3 I" C* w3 j

    : ]* Y5 a) ~9 m; w  w# A11.10.4 ngx_http_f?inalize_connection  441
    ! R) G* a$ J8 t7 m5 Y+ `: p& E% ^' r5 B
    11.10.5 ngx_http_terminate_request  443* K3 O7 I! X7 T" Y2 c: a. ]1 `
    0 F. n  j5 U# ^6 Q$ \# x+ M# ^
    11.10.6 ngx_http_f?inalize_request  443
    6 h# w8 M) B. V* R/ E3 n* R- G* ]5 l7 z: p( e0 j
    11.11 小结  4468 @$ c: c! V/ ^
    8 B& u2 Q5 i6 D3 X* Z; {
    第12章 upstream机制的设计与实现  447
    9 ]; }# S! a- \) q1 E% L4 U$ c% _" b! l2 {  i
    12.1 upstream机制概述  448
    # i2 O% `3 u3 O* T+ e  a! T4 M# [. W
    & c: l- I) f* h2 d8 C, N# B12.1.1 设计目的  448
    ! A+ I0 {* v4 ?- q) M
    * E# L3 Y: G. J& {" Q! S: V! c+ `12.1.2 ngx_http_upstream_t数据结构的意义  450
    ! m: \/ R' Z  J# w- D5 q0 \; l: O6 @
    12.1.3 ngx_http_upstream_conf_t配置结构体  453$ r" o' i1 P3 |

    5 ~! L: L$ X$ w8 h' ]% S! ?12.2 启动upstream 455
    ! r* A8 i! F2 I  Y" B4 T- d! W$ z9 [
    ; J5 Y! E/ P8 u! c12.3 与上游服务器建立连接 457  o; S7 Y: U/ Q" A. n# [2 s/ ^
    4 `! d' i& q; B- k% h. x
    12.4 发送请求到上游服务器 4600 J# W. Q; s) i- S1 M" }
    - c8 o- _( O! q; B, \7 `0 G# t
    12.5 接收上游服务器的响应头部 463! T1 m. w+ M+ n) q

    2 E# _8 ?0 |% h- N1 T/ P12.5.1 应用层协议的两段划分方式 463
    2 t2 k7 A: Y  Y( o$ |8 b: x, F/ X- g5 T$ N
    12.5.2 处理包体的3种方式  464
    7 b; }6 ?, }: V3 r+ n3 E7 U" |: o( \; \. Q1 b  _
    12.5.3 接收响应头部的流程 465
    8 d. g# Z1 S6 C
    * S/ |+ z- C* ~( u12.6 不转发响应时的处理流程 469% Y$ n8 b( V- K) Z2 k: `$ @5 T
    / h3 j. u) z9 Z6 q" V
    12.6.1 input_f?ilter方法的设计  469
    5 V7 g# x5 P5 _9 r4 F8 @7 @+ Z2 Y% E
    12.6.2 默认的input_f?ilter方法  470
    8 p+ a- @1 R) b
    / G0 Z4 _$ J6 `, c, ]1 Z7 h( \8 o12.6.3 接收包体的流程 4722 ?5 j" X5 {) w. Q, m3 |9 O% g, j
    ( C. _: l( V4 G# K4 L
    12.7 以下游网速优先来转发响应 473
    3 \+ _8 x  ^" U; W7 Z4 Z1 ^% w  V! E) x. D% f
    12.7.1 转发响应的包头 4749 U. A. b+ ?' r7 o! Y. d/ K

    # Y6 P, [& W: \- T3 X0 C+ Y' Q12.7.2 转发响应的包体 4778 t" A, Y9 z; t1 F1 B6 h5 B- `5 S% G

    , R  R* f4 h0 K8 }' _$ Z: ^7 g12.8 以上游网速优先来转发响应 481
    - z1 x% x9 c$ f; [; Q3 H
    ' |% q' t$ j2 P' w  y( _. W12.8.1 ngx_event_pipe_t结构体的意义  481
    9 S; e/ H  M* L/ X! `# i
    % A# w, [) g9 i5 f; t; r; |12.8.2 转发响应的包头 485' {% U; B9 A& G% b: J4 h- P) ~6 k

    7 I2 _" ^, }2 x0 V! |12.8.3 转发响应的包体 4879 j+ C4 s/ X' \- L8 A

    ' ^% r) a: g  \" u12.8.4 ngx_event_pipe_read_upstream方法  489  O/ y+ U5 `7 ?2 N0 N3 m* Q3 C- d' C

    : t' H, n- u. R5 L12.8.5 ngx_event_pipe_write_to_downstream方法  4942 y# e6 |3 I  D/ R) Z9 U
    4 Q9 ~5 t. {% p0 X- n' N$ }% b
    12.9 结束upstream请求  496
    3 Q3 A4 y# R8 T2 [9 a5 i( l; f8 V' ]. v5 z, Q
    12.10 小结  499
    , y& E7 k# _" M; c  o
    1 X8 H- z2 [: X7 T+ O2 y* D% I7 J第13章 邮件代理模块  5007 F" ?2 j$ ?, C

    7 H0 }- o. I1 j" l  d( w1 s13.1 邮件代理服务器的功能 5009 M. o% f1 q9 u8 z; {

    ( n1 H, I; ~- t* M13.2 邮件模块的处理框架 5037 O8 r5 b( z9 o! t  j8 ^- \" ]" g
    ' G- k/ x; i6 y+ N0 S' d" D0 x
    13.2.1 一个请求的8个独立处理阶段  503
    , i$ e% p3 Z+ g- m$ i# }# _; g/ z/ P2 S
    13.2.2 邮件类模块的定义 5048 N3 R' u, o" g3 j! U2 S& E) Q

    ! F- z( e% }: H13.2.3 邮件框架的初始化 506- k& U; ]+ ?7 q: p1 Z5 w

    7 [3 U' t1 s$ t4 r& {2 Z! B  L13.3 初始化请求  5066 ?; T& Q* A4 d8 ^5 S
    5 g) y  P1 e* }" `0 n
    13.3.1 描述邮件请求的ngx_mail_session_t结构体  506* ?0 Y$ w; K4 Q9 Q

    " h* f6 E5 |5 b* d0 w- g, v! q0 U* e13.3.2 初始化邮件请求的流程 509! ?3 ^# d% Y, l6 [+ c7 J( Y% Z
    7 R: _: u; y! r1 y( Y
    13.4 接收并解析客户端请求 509
    * H. D; R; x4 F( @' k
    * A, T6 m# s; v8 k, B- O$ D. [13.5 邮件认证  510) H' x9 S6 s& Z" o7 d

    3 j% N) }: L* ^& l/ u  ?13.5.1 ngx_mail_auth_http_ctx_t结构体  510
    , d1 s7 h( |  F8 {8 D  A3 e5 t' v/ I6 `4 F& J# |/ R
    13.5.2 与认证服务器建立连接 511
    & a: U' {% g* ^: V8 i
    5 O4 Q3 i3 h. K13.5.3 发送请求到认证服务器 5136 k8 Y; |8 [' a, S5 e
    6 a$ U5 b, v" d2 K/ q, u
    13.5.4 接收并解析响应 5146 c- ?  N' m6 P1 t! }
      W. Y1 L6 F' N( H8 B# R$ f
    13.6 与上游邮件服务器间的认证交互 514
    " y8 e+ Y' d, f6 N! H+ z
    : u" a7 z) o4 Y  M5 J9 f6 j9 l13.6.1 ngx_mail_proxy_ctx_t结构体  516
    7 f7 q! M0 d. |
    % `( T+ B, h& ?13.6.2 向上游邮件服务器发起连接 516
    # o& p8 y5 |# p5 w6 S, U' m; ^/ J; h4 U- p1 S
    13.6.3 与邮件服务器认证交互的过程 518
    - Y1 a( y3 N" G0 A
    + i( v, G5 {" e0 b) ^13.7 透传上游邮件服务器与客户端间的流 520& }+ y1 ^& m8 f4 l6 |+ U; {

    0 @* O& n. A- T8 h( q& O13.8 小结  524
    ; B& @% B( ~. E4 y  z' N( T8 a# j, u9 d6 g2 L9 ]9 @. u) {, X
    第14章 进程间的通信机制  525) p8 i" g+ O; u
    . `, A# T7 X3 ^0 A9 V/ i: ]
    14.1 概述  525
    ( R! B# ~; K: G4 a/ v( z) n. q: h: d2 o* ?1 S% ~, B% N
    14.2 共享内存  526$ m2 x& ~" F: |2 ]5 e9 R  R

    % @' ?5 y# W9 q/ [8 _9 u14.3 原子操作  530
    3 e8 E5 a% J1 O$ Z
    7 W6 r- i* b' H; t14.3.1 不支持原子库下的原子操作 530
    ! U7 d/ G3 i2 `4 |% X! {; N) P/ ^: i% x. j/ E: ]  o9 o
    14.3.2 x86架构下的原子操作  531
    ' h7 W* B* W& _+ i  @
    - N5 j% D7 j+ ^2 `1 {, s14.3.3 自旋锁  533% w7 w7 i' ?; H) j2 v! X; Y

    - |7 l1 Z# E- A, ]& A14.4 Nginx频道  5352 W" C" ]; c* j/ ^
    3 t9 D5 ?0 d$ G5 D3 D& X2 X, |: i  I
    14.5 信号  538# F7 K: Z/ |9 |$ G2 m6 t# X
    & c& G  `. O+ [) V
    14.6 信号量  540
    . x  O) a' w; r  K/ u- r9 F
    & V3 y" r% G  P. D1 i14.7 文件锁  541% }$ w& T; o0 I

    0 U3 j: i, k+ \14.8 互斥锁  544
    ' ]5 D* }3 \6 j5 A8 Q  q
    & p( U( A- m4 B1 m; q: Y/ g/ D14.8.1 文件锁实现的ngx_shmtx_t锁  5468 @3 Y5 S- P( e, e

    5 y6 r. E# t6 w+ ^8 c, N14.8.2 原子变量实现的ngx_shmtx_t锁  548
    $ t4 K' Q! F, n! j
    % t8 C; Y: F. u. p5 y( s% b14.9 小结  553
    $ a& }, W9 v2 N( h0 O' e% |7 z7 G* J' B" ~0 q" K  U( ]
    第15章 变量  5547 g; m# k' B6 i9 q* Z! p

    7 ~3 W" l" u8 Q3 i7 |; z15.1 使用内部变量开发模块 555) C7 r- s5 x5 E; X3 R

    ' [5 J" i+ b- r5 K5 m6 `* C$ m" [  ^15.1.1 定义模块  5562 T& O7 P- w. S: ]9 D; h" u9 d- N
    ; o6 t! e. H9 F0 C3 M  g
    15.1.2 定义http模块加载方式  557
    % }# w. F+ ~/ ~  [: }* I. ~, B1 d' a2 u+ O- i! L
    15.1.3 解析配置中的变量 558: y) B1 Z" ]+ e3 B) w  _# y( {
    # Q+ w& Y1 C' |; M
    15.1.4 处理请求  560& J: C: q4 e& b  q9 e6 I5 h& ~
    . x( j3 t; ?6 Y4 s3 b7 P) v1 N
    15.2 内部变量工作原理 561
    % U- ~" h: w$ Z4 M# R- B$ O' R
    * w& Z. `$ {( E4 p15.2.1 何时定义变量 561
    - x4 J( f2 u. `- K9 T. Z' b( h8 X) Y7 M$ ~
    15.2.2 相关数据结构详述 564! ]8 m. F' j5 L1 W  W1 {# X" o

    % r+ J9 I. b' D0 \9 U15.2.3 定义变量的方法 572# {3 r+ ~% z, o( W: ?

    7 _) b. T5 D$ r8 Q. {  y0 ]3 c5 |15.2.4 使用变量的方法 5722 k" t8 |/ Q8 r2 J+ s' p% R1 y

    / Q$ \: [4 y0 p5 K' @9 `9 F15.2.5 如何解析变量 5730 m3 y" R+ [! _: Y/ M/ S0 I% S
    9 s3 V+ ~5 P+ t( g" _
    15.3 定义内部变量  576( Y0 f( i) i3 M) @7 s7 ]. \

    . z" q! m3 ~. H+ i- o15.4 外部变量与脚本引擎 577
    ) m0 F) K) {% A) }, P9 t( h( N! x; z. X  Y
    15.4.1 相关数据结构 5781 r5 L7 P3 {/ y5 a7 \

    , y& W* O& A% I2 f15.4.2 编译“set”脚本  581) c1 D9 R$ o+ \6 c  G& z: G0 d/ n# E

    2 {( f4 C) _% N# _% n& z3 k! {/ u( v$ \15.4.3 脚本执行流程 586
    5 ^1 w+ N" J% }/ `# s
    8 K3 W0 {: [' f15.5 小结  589* k9 v7 ^8 I) M/ K5 L8 F2 v

    ( b- @% A* q$ r/ `; D) z第16章 slab共享内存  590% s' o! ]5 D. @! G

    ! p$ a; e* z# o3 `# x7 d$ @. g16.1 操作slab共享内存的方法  590' p0 Z+ |- r4 {) R5 ~% \

    / J* x& I2 [' K" h* r16.2 使用slab共享内存池的例子  5920 P% B$ f1 S+ J" P5 J0 j
    : c8 L! q1 c! X+ @- [6 W
    16.2.1 共享内存中的数据结构 593
    ( t; J- x$ |# L/ b6 t, ]# D, N- p+ }6 U+ c4 [9 m, ?4 J
    16.2.2 操作共享内存中的红黑树与链表 5955 ]) w3 F% i- C6 \+ K6 J* u
    . ~' P! x' D# t1 {# `6 ]2 G, N  K9 j* t
    16.2.3 解析配置文件 600
    0 U- v# P7 V8 n3 g# Z' H/ }9 L  p
    4 D4 h: c/ X  j$ y$ c5 H16.2.4 定义模块  603
    " p# _" ?; d% Q5 \0 H
    $ \  \. F; i3 J' J9 |, o/ M+ V16.3 slab内存管理的实现原理  605  [& O' E0 c+ o) M8 ^
    ' j) `$ Z; ^4 j7 ]! T5 x$ H9 a
    16.3.1 内存结构布局 607
    * h: A/ p" I& U- K) x1 ]( o! Q3 S( t
      `: Z/ R0 j' l) B16.3.2 分配内存流程 613) w* @, w% H# M7 ?4 L0 s' c
    5 L; s; m% W7 t! m
    16.3.3 释放内存流程 617
    / g( |( ~  x9 B2 Z
    2 T2 H# `4 \! ^  h% ^/ o( ^16.3.4 如何使用位操作 619
    % e$ X+ h7 Q/ ]6 D; V
    5 i0 }1 z/ t; s9 ?, Y16.3.5 slab内存池间的管理  624
    9 _. E" e6 |" s3 k% W% Z1 h6 J" y9 Y, r0 V
    16.4 小结  624
    9 ^* h( W6 b7 W" Y# m+ }: O

    " c; X, X8 \! S' L' W

    & v; S/ @2 B! R) [: s5 Q$ s" p& {& p; n" @2 b2 L

    ' K1 |/ u% b; z百度网盘下载地址链接(百度云):java自学网(javazx.com)深入理解Nginx:模块开发与架构解析(第2版) PDF 高清 电子书 百度云.zip【密码回帖可见】20200802更新
    / h5 G" R8 U2 b9 F! K6 x
    游客,如果您要查看本帖隐藏内容请回复
    4 @( H/ s% T: }% `; g

    ( l4 l8 p: v, T  s( a0 {# [3 i
    回复

    使用道具 举报

  • 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 释放内存流程 6170 r* g5 \$ c! B. \+ b9 t  H4 F
    回复 支持 反对

    使用道具 举报

  • 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, 2024-12-22 12:14 , Processed in 0.305818 second(s), 39 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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