java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 33733|回复: 376

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66097

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

    发表于 2016-8-1 14:13:22 | 显示全部楼层 |阅读模式
    java自学网(www.javazx.com)-java论坛,java电子书推荐:《深入理解Nginx:模块开发与架构解析(第2版)》
    " `4 x6 x# r# i/ V8 }: G" kjava电子书推荐理由:本书包括四大部分:第一部分针对初级读者,介绍Nginx关于获取编译运行的基本知识。第二部分针对中级读者,以一个例子为主线。第三部分针对高级读者,这是本书的重点,彻底解析Nginx架构。第四部分针对中高级读者,以Tengine的开源模块为例。/ ?: y+ v1 |, O/ f( D) D' e

    8 j  [' J' z& f" K0 g5 h: P! |
    # I7 L2 O, S; W5 U: w0 N+ n: G/ d# T
    作者:陶辉4 @9 C! u' K% j2 ^7 d9 n: i
    出版社:机械工业出版社
    + z! P+ \6 g" q1 t( q出版时间:2016年2月0 r' {/ K* E7 B9 i! G) C
    1 e1 W( t8 p; h: H8 o- K+ x4 Y- ?
    5 j# w/ Q/ {5 b: @8 s
    QQ截图20160801140226.png
    3 k  L; m5 Y8 x/ O- u5 q
    1 z  V6 c* d! {4 s* t
    * d; R  b% m# J+ K  z7 K1 C2 q
    java电子书目录:9 M' w7 z1 L9 ?0 f" T* H% {5 o
    1 T; H7 B, U# I
    / K8 E" ^0 W# t- o
    前 言# ^8 g- q+ G' @+ O% o7 x
    ( t5 H& v& `6 o/ s* V3 e, [
    第一部分 Nginx能帮我们做什么
    + `! r& o  M* ?  \
    7 J' P& M3 Z4 F) t$ T第1章 研究Nginx前的准备工作  2
    - K: ^+ j% q: ^7 S; }0 G
    % }" p. H% c& Q% X( z( W; B1.1 Nginx是什么  21 `/ M8 Y# {* k* L. m. E7 W% t

    3 z! V7 I: K  W0 S1.2 为什么选择Nginx  5
    / ~. i' o4 w  u* E8 G" B8 e8 r4 W% B% g2 r% S
    1.3 准备工作  7( C5 k$ y1 V( P8 X2 L* H' i; D4 N
    + F3 H$ `0 S, r2 v* k' N% h4 q' J. ^: X
    1.3.1 Linux操作系统  7, C- T% e$ B& Q2 i* ~- j: T; y

    ) x9 C' z5 Y5 }8 R0 k3 r4 z1.3.2 使用Nginx的必备软件  7: }+ K3 R5 B$ [0 _6 i: [  o4 r

    8 s& i& W" R' ?; u! Q, }( x1.3.3 磁盘目录  82 a5 _' _8 d; e- {$ }/ I3 N# P% Z

    2 {( i! e  r/ u% X! `9 C1.3.4 Linux内核参数的优化  9
    ' ?, N8 E. z0 f, l+ r) k  Y* @8 f. O( S8 ~- T# i1 n7 N, j5 P
    1.3.5 获取Nginx源码  10% s* p# x: j6 V- l! z0 Q

    $ |+ y  D* D/ _  \/ ?% z  r1.4 编译安装Nginx  11
    0 d& I: w8 ~1 J0 V* Z% f2 X; U9 ~: t5 x9 m+ x( K3 Q' t
    1.5 conf?igure详解  11; l; e. T5 M  n3 R: a2 [# x
    / u5 Q& W1 x, \, u% c
    1.5.1 conf?igure的命令参数  117 L& b3 }5 P+ g5 ~; _; p

    6 O/ J5 f  Y, K: ~. |$ p! c1.5.2 conf?igure执行流程  18
    : h' ^4 _3 a6 T3 g& V) w
    ( S% y: Y$ [6 p5 s  W1 a1.5.3 conf?igure生成的文件  210 r: I6 j1 o4 t

    " ~6 t0 w# C! l! \; T1.6 Nginx的命令行控制  23% ?# u' y' O& V0 V3 H
    9 ]  V; [6 g8 j% t) Y( f$ Y3 R
    1.7 小结  27% r( G6 l5 ]3 x5 L6 T( ~' i& ^
    - y. ?2 T8 P+ ?0 {( @0 `
    第2章 Nginx的配置  28# m3 M6 b9 I' N0 {

    2 U" w4 \+ v% [; j1 f2.1 运行中的Nginx进程间的关系  285 V! L* J/ q  U2 Y4 \

    % u2 Y5 w& t* j2 X# p. K5 j7 v( T& W2.2 Nginx配置的通用语法  31) @6 R$ n- d! P1 }' T/ Y5 Z

    * n$ A0 o0 W8 `2.2.1 块配置项  31) J$ P& d3 o1 \+ C$ @
    % q- V6 L3 w  B; M8 f
    2.2.2 配置项的语法格式 32
    & G1 d: q& E% m$ N8 \
    / g8 z# Q# [2 d  n: |2.2.3 配置项的注释  33) E; [4 P& L" D; F

    ( Z" j9 R0 \5 w6 d/ o0 O/ W2.2.4 配置项的单位  33
    , O. f# X/ G  L) W1 x0 q* v
    0 a! k  k: K3 N1 W0 P2.2.5 在配置中使用变量 33
    ! d& E) k3 m& ]8 A# [! R2 V
    * c/ d  @5 l% I  x2.3 Nginx服务的基本配置  34
    " u" E( }, P8 C  y! P; _0 `
    - H. E; x6 ?- v5 n) I$ W$ k8 W, y0 H2.3.1 用于调试进程和定位问题的配置项 34
    # P! Y  I* x# C: }2 _( Z0 a  l/ k( E( P: B( L+ B2 l9 f
    2.3.2 正常运行的配置项 36
    ; K: U. X  }# |7 t3 E* r  \& J6 e/ D: c
    2.3.3 优化性能的配置项 37
    4 h4 c% g# z0 P  i1 P5 Y% K! L* I+ \+ b/ r+ w  @9 @
    2.3.4 事件类配置项  39* W& {4 o; W) k: C. V4 a; P0 H
    & P, m# L( i# u3 u4 a" L
    2.4 用HTTP核心模块配置一个静态Web服务器  40
    5 @* p6 c. W$ R
    2 b; s4 N, m, L  g0 h2 a6 h2.4.1 虚拟主机与请求的分发 41
    , U" X1 j4 |* a  h3 u& p# u
    # o5 m3 ]- U4 ~, V. D0 g7 W; k# l2.4.2 文件路径的定义  45
    . O' Y- ]- ~( ^7 b, k
    % d: d" B* v9 n8 R) }& p2.4.3 内存及磁盘资源的分配 47
    8 w) Y: E4 g& f% f7 v# j$ o! T
    # }# l( C- G3 y+ @1 K6 \7 G) ^2.4.4 网络连接的设置  49
    # ~5 k. X. T9 u/ y1 l+ ]9 z) d- t, {& Y
    2.4.5 MIME类型的设置  52
    / i# l( k# l0 _( `1 p* B) o/ {& l6 Y! e  r0 L5 Z* Q' w$ W2 R
    2.4.6 对客户端请求的限制 53
    ! j! f. i) P9 H7 b* a: K
    . B$ j$ b/ K# m$ T1 R- n2.4.7 文件操作的优化  54. E" g9 Z0 [- k+ n5 ~& Y; U, @
    - P+ ^& [3 c) U) t8 [: M# W
    2.4.8 对客户端请求的特殊处理 56
    - P. o( U! u4 u/ y$ F/ z
    . I! n7 U/ v: s3 I! M4 H2.4.9 ngx_http_core_module模块提供的变量  57
    ) |- d2 Q& P4 ^; v! A' d
    ) U' R& }' ?4 y, e2 o2.5 用HTTP proxy module配置一个反向代理服务器  59+ h) m2 i2 G$ Y  W& B, A: F
    8 ]8 _( l, J5 M# q, w0 Q6 S. c  X
    2.5.1 负载均衡的基本配置 61
    9 B5 ?; f% x" ~. @+ E8 c# ~: A4 E; h  R& s, z
    2.5.2 反向代理的基本配置 63
    6 G9 h4 b% ]8 H- O8 t9 l( \
    9 ]/ F' O8 t1 w, s# Z2.6 小结  66) x0 n: K: e) ?
    " h2 b% y  c! t/ [2 s
    第二部分 如何编写HTTP模块9 \. Y( q" \4 T1 ?
    - i' U; Q! t! b$ X
    第3章 开发一个简单的HTTP模块  68
    # J* c8 N8 h/ o5 o. ^9 C
    / ]& y6 g& |  k* g+ o3.1 如何调用HTTP模块  68
    * ]( X  }3 p3 `' i7 q" d" i
    / U8 S2 Y4 {5 Z7 T. E3 h* A3.2 准备工作  70
    5 X; k8 I9 Z! ~5 Y+ r' N8 P
    & z7 H8 Q1 Y; T5 s8 }3.2.1 整型的封装  71
    - D: h4 t3 I% ]8 O. |0 q
    0 Y; i; y" Z( S0 _3.2.2 ngx_str_t数据结构  71) ~9 t: ~) {" a0 A5 G# q9 o

    % r: I0 B" H) C1 p" Z% p0 ]3.2.3 ngx_list_t数据结构  71$ h& p% u$ L4 p, a

    8 W% k, G% o0 v5 p3.2.4 ngx_table_elt_t数据结构  75
    0 O: P; w, ~% `4 N; g; E2 c4 L* p0 ~% f, U4 a
    3.2.5 ngx_buf_t数据结构  75. l5 h( c+ K& v+ [/ ~

    / w0 n3 f- Z+ J. h) X2 B( C3.2.6 ngx_chain_t数据结构  770 q& P: C+ T# ]4 F2 [
    ' a$ O& G* H2 g' D! q+ y! J" N
    3.3 如何将自己的HTTP模块编译进Nginx  77
    + k  W$ Z8 W, N) l  D8 R
    . ]& T% h! l) C1 h+ r& K. l$ }3.3.1 conf?ig文件的写法  77% l/ A  X! [! k) Q. o* B
    : a+ i6 A" k0 O3 O, N% o4 n# v8 _/ b
    3.3.2 利用conf?igure脚本将定制的模块加入到Nginx中  78
    ) P6 J- C6 r% r$ b$ n& |7 F
    / R: x* p, R4 ~5 m: c; l1 L3 o3.3.3 直接修改Makef?ile文件  81
    2 v, N5 l5 z/ G* b( C! B0 Y. N% V# O# b# n6 q7 l; ]2 ?
    3.4 HTTP模块的数据结构  82
    4 C/ w3 O+ o2 ~" T8 V$ O9 {" E8 t% v8 z5 d* Y9 Z
    3.5 定义自己的HTTP模块  86( x/ b- N! j# {' I% X
    4 Q6 N! A2 V2 a2 F
    3.6 处理用户请求  898 ]9 |: r# K2 k6 T: A7 ~
    : p+ [+ K/ C5 C! m) B& |
    3.6.1 处理方法的返回值 89( e$ l& i( l% c& U9 Q) U) w
    8 _7 K1 Q3 N% Q% _. T6 Q0 I0 V
    3.6.2 获取URI和参数  92
    # d4 A+ m. F5 {* `8 A0 Z$ }
      o5 i  f, N. T( v1 b3.6.3 获取HTTP头部  94
    6 g) Q/ e; C/ p4 _3 C7 E
    , t% u4 c: N. [8 B3 u9 l1 e' A3.6.4 获取HTTP包体  97
    ( k' l8 q' a. x$ L
    ( I: Z( F# d9 d. b8 w3.7 发送响应  99+ M% G  j( u( d7 [/ X) b
    , e( S& S1 H/ ?$ [
    3.7.1 发送HTTP头部  99
    5 @4 q0 P+ w. B/ X$ t9 N1 R1 L3 u' E# J4 J. E, r
    3.7.2 将内存中的字符串作为包体发送 101
    ; e* m& v2 h( Y; E* M' ~" k6 n7 R5 S# f  u# k& \; n8 q; [, K
    3.7.3 经典的“Hello World”示例  102
    ) W: G* A# y5 x+ C
    # j# g9 @' A0 K; t3 s* G; i9 ~3.8 将磁盘文件作为包体发送 103
    - c: K9 W% X2 h$ A3 m6 L6 Q9 b1 [$ L0 L2 Q
    3.8.1 如何发送磁盘中的文件 104
    7 e* U4 h5 e; s4 K0 M
    # |  R$ T" r3 p, @3.8.2 清理文件句柄  106% x/ r: J5 W, L8 U* P! i4 f
    5 _/ a8 M1 p  w) G3 Z$ E6 k
    3.8.3 支持用户多线程下载和断点续传 107* D& o' ]+ {" }. P% e
    7 A' T. B" f& K3 P1 ^
    3.9 用C 语言编写HTTP模块  108
    " S# T" K; v  t2 `" {3 ]# p' y
    & {5 g- N! H( l3.9.1 编译方式的修改  108- h- h1 x: Y4 L- @: |  p

    : `! q4 P2 C0 D4 b3.9.2 程序中的符号转换 109" p! k5 X4 N5 w$ ~3 F2 a* Y, ~' o* l

    3 K5 b( |# c3 A2 r4 R- `9 x3.10 小结  110
    - x2 P; F8 f1 E& a/ b* S, g5 r8 l( L6 [0 M# E& S  {
    第4章 配置、error日志和请求上下文  111
      Q, p; z( `! E  z' B9 \% o6 Q3 \
    2 g. R" S$ Z7 {. X4.1 http配置项的使用场景  111
    : I" R# q9 I% ?$ u9 L$ o. o. M+ v9 p4 K: L7 e- I# q, J
    4.2 怎样使用http配置  113# _0 p, t8 Z: e7 W/ h  S2 k
    4 C- a' A/ Q. N0 o8 [* {
    4.2.1 分配用于保存配置参数的数据结构 113- ^8 `$ R% b9 z: g5 J

    ! j. W% ?% J7 M- l2 T4.2.2 设定配置项的解析方式 1154 K7 _. x( P5 N4 C/ D$ m. s

    * H5 P5 i# N* A" ~8 k6 ]9 i4.2.3 使用14种预设方法解析配置项  121
    . `4 J+ i6 _' j* {" U
    & Z3 k3 B6 l- |, d* `4.2.4 自定义配置项处理方法 131) f: Y: y2 @# m3 }! F5 d- }
    8 e' ?' ]$ U$ d; {, c4 b  `
    4.2.5 合并配置项  133+ w& \; S4 g6 @6 j

    & j+ A" R$ a8 [5 l* F1 Y4.3 HTTP配置模型  135  N3 }  H; t* {7 w( U/ e
    , x; |9 V8 m5 D" |, [: L
    4.3.1 解析HTTP配置的流程  136' c2 v( B2 Z/ p% z" \4 @
    & u0 q: X# j9 {- j* b
    4.3.2 HTTP配置模型的内存布局  139
    : h  P7 q+ s. p. ^1 l( A* T  j0 u1 \- j" M, C7 j, f. G
    4.3.3 如何合并配置项 142
    ; u2 H' f, W' v  a9 ?
    0 D1 y+ U3 e8 Z& e4.3.4 预设配置项处理方法的工作原理 1443 u. j& [0 ~$ V% f

    . j$ R  e" t* j- |: h) ^4.4 error日志的用法  145
      G2 _! `, J0 o% j4 _* K& l8 l1 X3 |  G( X7 z  J
    4.5 请求的上下文  149
    % k) K4 x4 ?1 w1 s4 A. w6 H. A# b: ]% u$ }1 R
    4.5.1 上下文与全异步Web服务器的关系  1497 O! L! _, G0 N2 n% g# {8 c# A# r: o

    4 D0 i+ ^* M4 D- ^9 [4.5.2 如何使用HTTP上下文  151
    , R$ r& {9 M5 p8 i* P6 h2 K6 G0 f, D7 K& i6 y* Y  a# F; ?/ o
    4.5.3 HTTP框架如何维护上下文结构  152
    % Z; S! u1 n6 j6 v; _, j
    , w, i! N1 r4 i6 M& h6 }! X4.6 小结  153
    ! l, t5 g' P. ^9 R2 [/ b7 B' U' c* `1 F# L2 r; W
    第5章 访问第三方服务  154
    # v9 G. ?  H: G, k! s' J& D: B6 A- |7 a% x3 l2 h( l8 E$ F
    5.1 upstream的使用方式  155
    8 {, r. e3 C; v# }
    6 l# }. H8 ]. P" F  _: T- e- L6 [5.1.1 ngx_http_upstream_t结构体  158) d1 f& |" C! c9 T1 m* n& k3 c
    7 n' S; M+ f. L9 ]1 f
    5.1.2 设置upstream的限制性参数  159, D- r6 _! I( s! k" Z
    " b& L- u* g' @7 t, \
    5.1.3 设置需要访问的第三方服务器地址 160, ^% z0 l( q' O: y8 N. W3 v
    2 i5 w( |# J# ~
    5.1.4 设置回调方法  161# _& h4 h! b" d: b3 Q: t2 _

      ^/ O1 {. \0 t0 _: W4 i: Z5.1.5 如何启动upstream机制  161) s4 {9 B3 f- ^+ ~4 s! P& n" M

    - C; p' U: U8 }! b3 |% n5.2 回调方法的执行场景 162
    ! x- F- ~9 F( x3 `
    4 T$ p; U( t: A5.2.1 create_request回调方法  162
    ; D* f& B5 `: i" B, _6 j# w7 k
    8 `# k; g2 j8 E- a% S5.2.2 reinit_request回调方法  164
    6 ?) u: m  q$ A$ ~1 `; Q( L' T' X4 J; }! ~5 J% x1 B7 D+ N2 Q; ]9 c
    5.2.3 f?inalize_request回调方法  1650 [6 M" l7 k+ J& |

    ; u' B2 C, O0 q2 _; C5 N2 E* m5.2.4 process_header回调方法  1650 {; ^: r' [( L! J: f1 n$ C

    * a) ~9 M$ C  F5 b' v+ z5.2.5 rewrite_redirect回调方法  1678 t, Y0 s8 O, P8 `8 ]( j2 r! N' a

    ! _5 x9 v3 K1 W. S5 U, l3 T6 f; @5.2.6 input_f?ilter_init与input_f?ilter回调方法  167; d+ ?  z, a! F0 I+ _

    ) u3 U5 J( m6 D5.3 使用upstream的示例  168
    3 Q. h! s! c' Q7 p; c- g1 S1 o" ~3 j+ y' G9 p$ V6 d7 O! e4 k2 O; f
    5.3.1 upstream的各种配置参数  168
    3 t# j& c. N- a1 }9 \9 j8 ^. F/ c: U, j6 C0 }* @6 [4 T
    5.3.2 请求上下文  1704 [, ?! n5 y0 Y+ E
    9 `2 g1 N- n2 n' s. D& k: m
    5.3.3 在create_request方法中构造请求  170/ |) K$ j% E: V9 z) {* L
      X: ^5 N) _" W  b: ]' W
    5.3.4 在process_header方法中解析包头  171
    & g4 f" W. G8 n- C4 T
    : I9 L9 H& o1 v+ I5.3.5 在f?inalize_request方法中释放资源  175
    # f  L' ]1 f. @9 f5 L7 `0 d4 b' `" c' S. j, K
    5.3.6 在ngx_http_mytest_handler方法中启动upstream  175; r8 D2 J, v4 v; \  g7 g

    ' l) G1 R5 G5 V- H8 Z' X6 _5.4 subrequest的使用方式  177& y- Y: c- R. P- s9 I$ L" E1 g* v: j

    7 P3 C; b# p# `3 d6 C8 _# a) q8 k5.4.1 配置子请求的处理方式 177  s8 }! D$ F% ?6 s- q! l
    3 t& j. h1 S+ I8 o
    5.4.2 实现子请求处理完毕时的回调方法 178
    6 e- x8 a, f4 S0 C8 [/ E4 r8 L, ~$ n. g! A! q; l
    5.4.3 处理父请求被重新激活后的回调方法 179
    6 L4 p5 W2 d+ q
    ; q- @; J( c7 j" \3 X+ o' `5.4.4 启动subrequest子请求  179
      N( p/ P4 G  H! d& B7 O5 b1 F- z9 c0 n9 Y* _8 A$ A
    5.5 subrequest执行过程中的主要场景  1805 R/ ~4 E  L  N/ r4 A0 v! F

    8 b6 q7 E6 R7 |) X2 d6 N5.5.1 如何启动subrequest 1802 K& F  U, f! S. H. z
    6 W3 }. U4 ~; d, q. H6 ~
    5.5.2 如何转发多个子请求的响应包体 182* u' @) d( ]8 F4 l, X

    # b5 u5 n: D' L5.5.3 子请求如何激活父请求 1850 l2 o4 t! s# ^6 a

    9 E% u7 V& Q% c5.6 subrequest使用的例子  187" }4 R0 T5 R/ S* _( q

    ' F+ @/ k" x  W. N5.6.1 配置文件中子请求的设置 187% q( ]- {$ q& x
    ; N5 m/ a( b% H6 ?: e
    5.6.2 请求上下文  188
    6 ?  k( x! _$ A: `; H% P5 @
    / Z- K* J) Q+ {' n$ O0 B5.6.3 子请求结束时的处理方法 188
    * G+ s$ D4 ^: z+ D' R! K* X9 B
    - ]5 Y, k) d9 O; {& _: [5.6.4 父请求的回调方法 189
    0 W  }8 F* h# W1 x1 \2 ?
    5 x, t' C: h, E" V8 O. Q- y: w5.6.5 启动subrequest 190% x' x  I  d& v
    / z5 f/ X) P, R0 s( T# r
    5.7 小结  1916 F( n( s7 Q1 u9 N! C

    8 ]1 _4 U# D* S  J4 B: O第6章 开发一个简单的HTTP过滤模块  192
    9 \# U# Y6 p8 q1 g$ o/ N8 b7 L* g2 V1 n
    6.1 过滤模块的意义  192
    " x. ]2 N  {, A( p( f$ D3 y& H* T( _3 K7 o9 B+ }6 L
    6.2 过滤模块的调用顺序 193
    ) {& W- F9 ^8 Q- @/ u  q2 w7 V- _0 A0 O; c& A8 r) z. N# K$ b
    6.2.1 过滤链表是如何构成的 194' ~) C+ ]8 E" c2 l! r

    3 F, v% T) S% p6 A3 \- U6.2.2 过滤链表的顺序 196$ n0 r1 v, N6 |' o
    7 W8 M6 P8 H$ J: X5 i
    6.2.3 官方默认HTTP过滤模块的功能简介  197
    ! m9 y& f3 i# l
    % r0 O+ Z% d0 X" r& i. ?6.3 HTTP过滤模块的开发步骤  198+ J8 v( }/ v  `6 T, G
    ( L9 P$ h- t! t5 j1 m8 D- e/ `
    6.4 HTTP过滤模块的简单例子  200. U, r; U5 @& r7 d* f7 }
    1 J1 |( N* f. C4 S( {, f' K5 U4 E
    6.4.1 如何编写conf?ig文件  201
    1 G, p" ]6 Z3 S2 N  s6 P3 t" o4 e; O2 `* {& x$ g
    6.4.2 配置项和上下文 201
    % M0 [; I6 ~6 y# J7 h2 D9 g* ^
    6.4.3 定义HTTP过滤模块  203# ?3 F3 X) B( V7 \

    " B, `5 [2 K7 F# [# j1 b6.4.4 初始化HTTP过滤模块  204
    / m. R0 g# y4 G6 I, l! t' Z! U4 }/ S+ k1 v& C* @5 }
    6.4.5 处理请求中的HTTP头部  204  Z8 N& b7 L4 z
    8 G* ?6 L* c! _: d6 b1 S. l
    6.4.6 处理请求中的HTTP包体  2068 G5 s# K8 U- B' Q; D" Q
    . U; ~! a' o7 c6 O' w) v
    6.5 小结  206$ k; R" }4 z0 }. ~5 z  y$ [
    " ^$ o# _% _9 x2 k  A% {
    第7章 Nginx提供的高级数据结构  207
    & X" h! s1 I% t$ h. v/ T! `, o  F; z+ Z3 P7 ?( R# O
    7.1 Nginx提供的高级数据结构概述  207
    9 M& S  Q$ t! M" w4 E/ ~- ]: d" O' u' |) a- o
    7.2 ngx_queue_t双向链表  209- j) h# R. j. G

    6 Y3 O1 r/ @; t7.2.1 为什么设计ngx_queue_t双向链表  209
    2 `6 A2 A+ A3 W8 Q( _) B. k5 ~7 T* r# }+ d+ e; Y# i* s+ N
    7.2.2 双向链表的使用方法 209
    3 o% y  m/ |0 u% H0 g
    ! s5 z# t6 Y3 @: c' S% F9 o7.2.3 使用双向链表排序的例子 212
    $ q6 x+ O: g# A) B
    4 {5 z& ^4 d! d6 W7.2.4 双向链表是如何实现的 2136 q/ p% O; d7 i
    * B5 [0 P. h9 O4 h  r. i2 k6 m
    7.3 ngx_array_t动态数组  215
    # Y7 j. o( h" v6 k2 d2 x/ ~2 M
    ' v* |" x- a+ }& N9 n7.3.1 为什么设计ngx_array_t动态数组  215! e& T( b1 {$ M( H
    + M* F& T2 p/ N: {- u6 {
    7.3.2 动态数组的使用方法 215
    9 y4 C! ], H: R" E+ V, u  \4 s( k
    7.3.3  使用动态数组的例子 217
      T  \6 N6 b6 W% A8 Y
    - B( A) `# \/ V- j" q& `1 b7.3.4 动态数组的扩容方式 218/ ], w* D; {% y: c# S

    5 X* v# k9 o" [: }) Y: d: ^' C7.4 ngx_list_t单向链表  219
    , B: I$ M4 K7 C. ]1 l9 E% _
    5 X. |! V8 f  U7.5 ngx_rbtree_t红黑树  219$ j# k) [: D! U# l5 c6 }4 b5 W
    + N6 h+ P- a1 ~9 T1 i8 U: q
    7.5.1 为什么设计ngx_rbtree_t红黑树  219
    $ i2 d* U9 O% S+ [
    6 H6 A( S" ~; p- H7.5.2 红黑树的特性  220& \  ~! t' r  F# @; r

    ( ]( u: p) L+ j3 ?7.5.3 红黑树的使用方法 222: P. i0 t% X4 g& \, X% R
    9 ~( Q' C1 [9 w1 F9 h+ q3 G
    7.5.4 使用红黑树的简单例子 225
    2 x" ~: X1 s- ~2 V: o; M- {" J4 |7 g; t0 n
    7.5.5 如何自定义添加成员方法 226
    5 c( B9 i2 x% l2 G) n
    & j1 Y* C- f- R6 u7 c4 U7.6 ngx_radix_tree_t基数树  2285 r7 b3 ?  w; s4 f

    . e, Y  q2 T" U& _( {% q* `- k7.6.1 ngx_radix_tree_t基数树的原理  228
    8 A6 N. V" p5 d# U* r: v  M# ?9 Q
    * X6 E) A6 Q0 R: W7.6.2 基数树的使用方法 230
    9 m, v1 C: C$ t7 `) p- G
    9 \3 u, h# ?  y- m: \, g1 k/ R+ M7.6.3 使用基数树的例子 2313 O% l  i; T- u2 f
    ) L, S" l; B, I4 q. q$ z
    7.7 支持通配符的散列表 232- U& f5 K4 X# X1 ^/ J$ t
    / i) f% t( D. |! D8 k
    7.7.1 ngx_hash_t基本散列表  2324 M# [4 }/ N2 R/ V/ J! Q. [4 L4 w) z

    & X8 S# A1 d$ `7.7.2 支持通配符的散列表 2353 U; T7 z9 z0 X0 h
    4 C+ W  Y  p4 z3 s9 N
    7.7.3 带通配符散列表的使用例子 241* g/ a; G% W) f5 c" ?9 _
    ) F) _8 ~1 |; M7 h
    7.8 小结  245
    6 |: j$ @/ d2 f. ?
    , z$ I" n4 g7 I& I$ _2 \+ f& ?" O2 o第三部分 深入Nginx& g9 e2 W; D3 J4 m. N! ?% q$ W
    $ B8 N  j+ i$ T% X, G* b
    第8章 Nginx基础架构  248
      C; z9 s7 h4 S2 h: d4 J4 e  D# `! U
    8.1 Web服务器设计中的关键约束  249! Q( w9 j' B2 c' o( y7 a

    2 j5 I! i3 d/ x8.2 Nginx的架构设计  251
    . a$ r9 m% Z2 s& r* O7 I, _
    6 i/ `0 X- N2 Q: E" I8.2.1 优秀的模块化设计 251
    ; R9 ]. }% @" `3 W- f! G+ `. p8 `" q3 U% i+ y7 f% k* G  U
    8.2.2 事件驱动架构  254
    & \8 N. @, l# `
    / q" \7 X- d$ x8.2.3 请求的多阶段异步处理 256! D0 E/ N; u1 d' l: ]7 U

    5 {" O5 M$ A! S  g& o" H# u8 n8.2.4 管理进程、多工作进程设计 2599 Y# E) G! n* k! M6 j! t$ Q

    3 y% \* R. E2 a% U4 L7 `, p8.2.5 平台无关的代码实现 259
    - j, ~) c3 }8 l0 _- t( h; d# e' w! o  t$ ~
    8.2.6 内存池的设计  259
    ) v5 \5 [4 q1 ?* W/ S" O( X& `% N. j  ?5 j/ O
    8.2.7 使用统一管道过滤器模式的HTTP过滤模块  260
    ' B5 K% ]. U9 A1 b' ^" |6 E* J) g9 K" K" d, i
    8.2.8 其他一些用户模块 260
    " C9 S$ z9 G3 a: B6 e# F+ J8 n7 Y- Z
    8.3 Nginx框架中的核心结构体ngx_cycle_t  260
      G4 }8 L! {4 P- _4 D' @# o9 Q, u
    8 ?6 e  g4 U, N5 {, n! v! x! a8.3.1 ngx_listening_t结构体  2613 J2 W% `% Z$ H% n$ B0 ?, \
    3 M+ q! B& ]) @
    8.3.2 ngx_cycle_t结构体  2628 l- S& |% B2 K
    7 H  T5 U/ ^4 Z8 }) p: a! m( w
    8.3.3 ngx_cycle_t支持的方法  264
    6 f. k$ t8 w' a3 T9 x) h4 h& K0 Q# j' u+ n. o/ D
    8.4 Nginx启动时框架的处理流程  266
    " ^) _; V, C7 j0 z- W; w5 |; P) P) T& v
    8.5 worker进程是如何工作的  269: I! w6 s% L2 y3 W7 g3 `- j7 S, u
    . f' l8 x) C( H0 ^3 l
    8.6 master进程是如何工作的  271
    ; Y0 O) _; f: c! ]8 g7 ?, Z  P; Q; E; c; m7 }& G  _
    8.7 ngx_pool_t内存池  276; [/ [- [" L  \# V" R# q# ?9 N
    0 V) T2 A( u" B: e2 v$ D& W8 c% l' W
    8.8 小结  284- H, R7 v4 Z" [

    # r5 s- Z' ^  D( V; E% f5 F& Q' m第9章 事件模块  285
    " d7 [4 I* o) _/ I! ^5 H6 f/ ?, R7 ], W) v9 J
    9.1 事件处理框架概述  286
    8 i) b! o& X2 ~% R$ ?0 ]; z
    * N& v3 D' D: _/ S9.2 Nginx事件的定义  288) o0 y+ Y' S% D3 L5 S6 P; A/ y* P9 R
    8 o# G+ e3 J# v: m
    9.3 Nginx连接的定义  2915 k" D, C& n8 F6 Q- E! G
    & q5 v: Q) {' s9 q/ k' g$ Z
    9.3.1 被动连接  292$ N, Q3 L6 i7 I, c
    8 B! V3 O4 b/ v9 B4 \/ [# E! }) M
    9.3.2 主动连接  295
    ; s& Z. ]- t1 h, T, p  a6 u; |; y
    # o/ ?+ p$ ^3 Z4 ]# G- s9.3.3 ngx_connection_t连接池  296% j, x) M, d& n& _5 v" L
    : W. |0 \: r6 \- s
    9.4 ngx_events_module核心模块  2974 v5 w& B: Q( u1 d! B, J: n7 B

    & f- t" b" H, ^" h9.4.1 如何管理所有事件模块的配置项 299( i' s3 W  _' w/ h1 T9 }$ ^

    & i( x" a$ U# F- s1 j7 V9.4.2 管理事件模块  300/ V1 z# C$ }" A9 N

    6 j+ L" M( t( Y! c4 f9.5 ngx_event_core_module事件模块  302
    2 h7 i6 s8 n! F$ V' q  {0 I, B/ F4 k& Y% ~: y, w0 O
    9.6 epoll事件驱动模块  308
    3 V  x+ z+ u9 d  T* l
    8 q3 |/ O4 y; X8 u9.6.1 epoll的原理和用法  308
    2 t9 k' E: Z5 Y& _) g( b
    . ^- k8 t# Z: s8 W9.6.2 如何使用epoll 310& o) h/ v* ^: C) j, X

    8 B2 q% a9 [# U5 A& I3 y4 m) x/ P0 R9.6.3 ngx_epoll_module模块的实现  312. U' o9 c0 g2 U/ {2 P* ]
    ; H" |4 U/ o: @- o0 s* @
    9.7 定时器事件  320- @; W* V- d6 |: e

    , O$ z- o% ?4 C0 C9.7.1 缓存时间的管理 320
    5 M3 v/ u$ Y) m: ~
    4 `8 Z( N; }2 D# M) `- ^: |9.7.2 缓存时间的精度 323+ A1 B9 z: B6 e) C# h

    " a! l) n4 r9 P  s, l  k9.7.3 定时器的实现  323
    8 K# T. m8 t( ]/ u1 m. l% q
    ' }& ^5 }2 A; Z! R9 Q" O9.8 事件驱动框架的处理流程 324
    ! p% q2 D' ^$ @0 L+ z7 q6 O  U; m# L2 {. N( m" r& B
    9.8.1 如何建立新连接 3253 S" o* M1 O4 [
    7 M  u& U+ o) Y& c; z
    9.8.2 如何解决“惊群”问题 327& I, L3 |& U: S5 o& c( A; S

    : O( ^, t/ K6 h; i) g- }% b5 g9.8.3 如何实现负载均衡 329& m5 K, B- u2 Q- H. t

    " q& B# y" V1 p4 l1 m9 O9.8.4 post事件队列  330- W, ?, o5 f5 O7 O- O
    * k; t/ R' A( [9 f3 {9 Y# P! X
    9.8.5 ngx_process_events_and_timers流程  3317 ^2 j# k3 K! v! p' B- D$ F7 s) a

      S) \1 C1 e$ A9.9 文件的异步I/O  3349 h9 k) D" ~- H5 H1 n

    - T9 G  {2 s9 ?9.9.1 Linux内核提供的文件异步I/O  335
    : e2 G& M2 S' q' ?# {  b
    4 r  s' b! [( t9 t6 \9.9.2 ngx_epoll_module模块中实现的针对文件的异步I/O  337, Z% y* r2 K( J! d

    & L% Q; w2 i- J2 E) d9.10 TCP协议与Nginx  342
    ' L" o9 V, T7 I
    ! i' U  F, t$ u0 l7 v7 x0 u# J9.11 小结  347* r  F: s% v' h$ c
    5 u2 h# i' c( }+ T, @6 m, l
    第10章 HTTP框架的初始化  348
    2 ^  o+ \( o# ?) J
    1 Q" W( d4 h7 [( t3 c! n# n# p10.1 HTTP框架概述  349  l9 @2 E7 O+ ?- D- h
    - l4 R) n+ P# C1 U2 q: J/ m0 ?, w
    10.2 管理HTTP模块的配置项  352
    " W  k% t2 {8 k5 B; v. D9 v, z& c+ H% L+ R* X" R  u' h6 s; g
    10.2.1 管理main级别下的配置项  3530 b/ l- f$ S! }' [1 f, |* [( u
      K( ~- G7 a  [4 Y
    10.2.2 管理server级别下的配置项  3558 B$ i9 l  |, E& t1 L0 n

    9 [+ \3 s. d5 o% D' E1 ~! u8 D4 F10.2.3 管理location级别下的配置项  358
    7 D* P  ~+ N6 k2 z( o1 k0 m+ m5 R/ ?: k- B6 ?/ k9 }# [5 S  T
    10.2.4 不同级别配置项的合并 364% b) U* j" l: V4 ~% F- D

    6 E) Y- u- t0 W0 Q. M$ U1 r10.3 监听端口的管理  367
    " c. z9 E3 E0 [' |% e2 ~9 D6 w, N7 P. I
    10.4 server的快速检索  370
    # B# v2 d8 @4 r7 v" I$ ~' V* i# ~: k6 }0 }7 U7 u
    10.5 location的快速检索  3705 f3 a  \% A- I) T5 K% r
    # [$ Z! ~: x8 m( j
    10.6 HTTP请求的11个处理阶段  372' l/ X& R, w, B) T% P; P8 B1 N

    ! U1 \+ W; M5 v9 m5 ]1 b" [10.6.1 HTTP处理阶段的普适规则  374) Z0 E6 r. B; u( f. g) b& H1 |

    ' b3 C/ F3 n. H, e; z0 q10.6.2 NGX_HTTP_POST_READ_PHASE阶段  375
    % @8 ?1 H  E1 a# y3 I, m- A1 ?% v* O* F7 Y" U/ [! ]- G' x& l7 C
    10.6.3 NGX_HTTP_SERVER_REWRITE_PHASE阶段  378+ n' {1 x* E& G: a! B# B

    4 }: T; o4 k/ B% ~$ S, G10.6.4 NGX_HTTP_FIND_CONFIG_PHASE阶段  378
    / y# x2 d/ u: {+ G. a* S! R" q7 T% h
    10.6.5 NGX_HTTP_REWRITE_PHASE阶段  378
    : h; b$ L" O5 y+ s9 {4 a0 I: G, z3 P1 X) m8 b6 L
    10.6.6 NGX_HTTP_POST_REWRITE_PHASE阶段  379
    $ v" S  \$ }9 R# M; {9 I; Y5 b0 G' A6 A, R# x' E; S& t
    10.6.7 NGX_HTTP_PREACCESS_PHASE阶段  379
    $ e- v( V0 X" L& J
    3 r7 V0 R7 I+ w* `$ v; G10.6.8 NGX_HTTP_ACCESS_PHASE阶段  379, L7 A" b( F( C4 [& Y; I
    # Q5 Y7 X$ x5 w+ l- U/ T+ o) ?
    10.6.9 NGX_HTTP_POST_ACCESS_PHASE阶段  380' N7 j/ n: k5 J5 {+ g/ t$ ]

    0 e1 x1 W' k. v" n6 ^% e( K' t10.6.10 NGX_HTTP_TRY_FILES_PHASE阶段  380
      T$ M! M2 {# T5 \: e4 U' R
    6 ^5 l4 j  M  o' `% ?10.6.11 NGX_HTTP_CONTENT_PHASE阶段  380
    # e; Z$ W& B0 D9 f" ?) l
    + z) D4 A8 n; n9 l; G- S, Y10.6.12 NGX_HTTP_LOG_PHASE阶段  382% J" T) Z" q3 Q+ d( u- Q- z
    % d5 e, V& C8 D$ `8 G4 c* r) G
    10.7 HTTP框架的初始化流程  382; H, {$ U& T6 ~+ x$ O# O- {
    . d9 n) C( D5 _! ?2 Z1 v* D
    10.8 小结  384
    & K- t9 P, o  e$ \1 X. K; q
    ; B" U) {$ q' `第11章 HTTP框架的执行流程  385+ H2 Y5 S6 A2 L1 H

    ! c: B/ C! J( q, z: @" [11.1 HTTP框架执行流程概述  386
    ; ?4 P8 }9 v) r$ n* d! J) w8 F  r
    $ Q8 U) v- E) Z( P( }% V11.2 新连接建立时的行为 387
    $ E! {% z9 a' Q+ j0 a  N# v% }/ e" `9 k& ]3 @# `
    11.3 第一次可读事件的处理 388
      ^0 U0 H8 K! R4 Q% z0 g( n# k2 w, V8 ^8 Y9 |# G
    11.4 接收HTTP请求行  394
    # \1 Y+ p( q  T0 }2 u9 e$ y" O( x3 b: `& T' \2 b
    11.5 接收HTTP头部  398
    2 g7 V7 l! o  D) }/ a
    5 S6 A5 ~( ?- ^11.6 处理HTTP请求  400; D5 \6 O+ f2 F$ J

    3 X( b- B5 L) |/ I0 R, ^11.6.1 ngx_http_core_generic_phase  406
    6 F3 [- i1 u" ?5 O" a. p/ @$ i& m& H
    11.6.2 ngx_http_core_rewrite_phase  408
    + H) @! _: L/ u- d2 p- V7 g$ m- |; t% u; h$ E: D1 o, l
    11.6.3 ngx_http_core_access_phase  409
    . s* p9 E2 M3 Z
    , S1 x  X9 \8 A2 m, g11.6.4 ngx_http_core_content_phase  412! i# d$ y8 h$ s9 `8 J
    ; z. q1 U( y4 H9 h' i
    11.7 subrequest与post请求  4157 Q8 F/ ~2 G3 }/ c0 }. A6 c
    : u1 _5 X: }% @' i4 ?+ d7 B, b5 P
    11.8 处理HTTP包体  417+ _9 T: T9 S. {+ @5 ]0 O/ ^0 y7 p

    # S' z* Q& G* J  E5 i11.8.1 接收包体  419
    ; R" c4 ^. r. {, @1 M% R* K& q* X' @* x7 ~9 _# m# R- h9 G. s
    11.8.2 放弃接收包体 425" T% k1 ^/ K! M' p0 r) |/ W( @
    7 p/ b6 C* S& r$ C% J! M
    11.9 发送HTTP响应  429& i: P( u5 p( s

    5 f# r# c2 C0 v% n11.9.1 ngx_http_send_header  430" Z! [. t9 i3 `+ \# W, p3 t# R
      k( c( V( O' P0 c: r* R, ~
    11.9.2 ngx_http_output_f?ilter  432, D4 R( g( z3 q

    & ^/ ?3 U+ q* n5 v) Y8 p11.9.3 ngx_http_writer 435( Y% X* G# T3 i: a

    ' i8 w' ~0 u, m( I+ P11.10 结束HTTP请求  4373 }$ b) r" O  H! E
    4 A9 u6 n$ s6 Z! n1 x
    11.10.1 ngx_http_close_connection  438
    7 Q2 v+ W9 O% x1 e& o" N) I( S
    / S  W8 z! t7 W8 ?; o) W% U$ C; d11.10.2 ngx_http_free_request  439
    : F; d4 _4 O$ C% n: E: L7 A) @5 M1 h$ F- T, y
    11.10.3 ngx_http_close_request  4400 e# i1 x, h" N$ U" `
    , P2 j6 o3 [) }/ M6 E! q1 E' u
    11.10.4 ngx_http_f?inalize_connection  441) Q, [. H: c9 @5 \
    9 G7 U& @# W3 ]0 W: _
    11.10.5 ngx_http_terminate_request  443" f$ p6 y) l% ^' y! y- x5 |* ]) ~
    6 O; W! j2 P$ |) W' z4 i. D
    11.10.6 ngx_http_f?inalize_request  443, h5 \- `! O: I+ `( ^  V
    / {5 c  |- W  P
    11.11 小结  446
    $ I; `( T% h3 w, O" n
    % b7 X" Q( K7 C, _: e第12章 upstream机制的设计与实现  447
    9 u% P% w2 q) [) I- i) W3 q: R9 K! E
    12.1 upstream机制概述  448# W5 o! e. W$ W( m6 d8 J5 ^

    % v' }$ C  I) L- d7 a; ~$ i) }: P( F. t12.1.1 设计目的  448& R$ V, I( ^0 E; H5 \. U

    , G* {& e# ?- k4 c! ]) E12.1.2 ngx_http_upstream_t数据结构的意义  450
    # ?2 A% n8 J7 B  L, h
      M! _; `( f6 l) A4 C2 l12.1.3 ngx_http_upstream_conf_t配置结构体  453: w' o* V0 a0 ?* C  `

    5 J( M* X( N* c- r12.2 启动upstream 4551 C7 I! G% x1 F
    - _8 c) ?( t  V
    12.3 与上游服务器建立连接 457: s- g, y8 ^) ^. V( u7 I( R; I6 A: D% e

    9 s8 x- I: Y) w& F2 m" C) Z2 l( t12.4 发送请求到上游服务器 460
    2 d& v5 f5 N7 k2 Q; m4 W/ d
    / m0 H/ X( {1 n5 R) r- I2 e8 k12.5 接收上游服务器的响应头部 463
    - V8 v7 T4 L: G1 r& F! G4 }/ v& \; G4 L1 M6 L
    12.5.1 应用层协议的两段划分方式 463: g) j/ b* V7 l4 n4 R( U

    0 H" ~) p' V# V2 D0 A, K12.5.2 处理包体的3种方式  464. v2 X9 w( ^9 g% [
    - o7 N  D# C* w' j& Q
    12.5.3 接收响应头部的流程 465
    & j+ A2 M; B: j  Q: H; G) g4 Z6 V% o$ d. m: s9 h
    12.6 不转发响应时的处理流程 469+ `3 J" R9 ]# m& Z
    ' _8 C# m' N* V4 g7 q4 R1 A
    12.6.1 input_f?ilter方法的设计  469
    ! k. ]/ F7 w6 R: L$ [0 I, m# b  A; K& V
    12.6.2 默认的input_f?ilter方法  4708 V' b5 ^4 \2 k2 `6 P& X

    * L: K3 \% |6 [  o$ v+ E12.6.3 接收包体的流程 472  m: ]$ [- {, z1 e

    $ u3 ^0 X2 i) Q  b12.7 以下游网速优先来转发响应 473
    : o3 `' O0 s& R+ |8 c& G  d# M5 O
    # t8 I# M3 a5 |2 y4 o" e12.7.1 转发响应的包头 474
    1 G9 f% k' T/ F+ c0 Q4 J9 S3 l6 P0 ?+ D* g$ Y5 P+ a& W7 e
    12.7.2 转发响应的包体 4772 ?" D/ c1 m3 _% c7 e

    ! P* m  o/ \! t) S4 Y& x12.8 以上游网速优先来转发响应 481
    ! x- h$ B9 v2 x; h% T9 e; k6 E) B; s) V2 h& d# Z# r& `
    12.8.1 ngx_event_pipe_t结构体的意义  481
    " n  [4 S7 V! y/ D( V# K) G- V3 j3 O+ s$ ~8 V, b1 N$ N
    12.8.2 转发响应的包头 485
    4 J7 I! A- t( B" L8 q- W$ a
    ' T8 }8 M* o4 \% q; @* D# S12.8.3 转发响应的包体 487, q/ j$ u( }6 j% ^4 B- W& f8 D& n( L

    * _4 b2 A* f! O' f: Z$ Q12.8.4 ngx_event_pipe_read_upstream方法  489! p& p9 r) V( o) T" L! {' z
    " Z9 G( ?$ R: t% D) }4 D& Q" F
    12.8.5 ngx_event_pipe_write_to_downstream方法  494" p' P1 a5 S5 h7 U. a% a. ]

    ) s  L* C/ j9 U( {( ?12.9 结束upstream请求  496* r* x4 \  s: f' P; t- V: l/ G

    % Z( F* F; a* |7 E( a$ |* m12.10 小结  499' O* v: C9 B# v( N/ Z0 R

    1 a. \, m/ U' \9 P+ P9 w第13章 邮件代理模块  500
    9 l' r- n  q# T* Z- f% H/ q# n
    1 a2 L) I9 }$ @! c13.1 邮件代理服务器的功能 500+ H( Z. ^7 ?; f  ?' Y

    ! z! A. w2 O1 H! l13.2 邮件模块的处理框架 503
    * J6 Y% I/ n/ o: E- E
      P: X9 O1 [# l5 M& s13.2.1 一个请求的8个独立处理阶段  503
    : I' ]: ^5 N: c( c) i4 B+ B+ N8 |. g4 @% F: P$ ]* B
    13.2.2 邮件类模块的定义 504
    7 N- p5 W! m& C8 x2 r* b0 W' p
    / M! `+ a/ c$ ^( ~0 s13.2.3 邮件框架的初始化 506" H! M4 U) g; e. W
    2 B& b3 t! t4 g1 g- \' Y' t
    13.3 初始化请求  506
    & W" ^6 @6 ]! s
    4 a0 |! \0 p9 [6 m! g7 G13.3.1 描述邮件请求的ngx_mail_session_t结构体  506
    + D) c% l& x0 {: n* Z
    7 W# \/ c7 a9 _) \( |3 }( }13.3.2 初始化邮件请求的流程 509
    0 B2 b' n/ \. Y/ G# y# D) u' M& e: t- s. e% m
    13.4 接收并解析客户端请求 509
    ( o4 V! u; p/ [+ K" G+ F- _4 H4 ?6 O
    13.5 邮件认证  510' j0 _" T' I( R
    8 u$ G+ y8 o8 S+ R  o2 U
    13.5.1 ngx_mail_auth_http_ctx_t结构体  510( o. Q. C+ @4 o$ R5 s+ F+ z9 u
    5 q8 a: D& n) C) k3 N
    13.5.2 与认证服务器建立连接 511
    - g- g; m! N! n- K, f, y* i4 p: x/ ~2 @' B
    13.5.3 发送请求到认证服务器 513
    & S! w9 Q* C  \& |8 _2 o
    , w8 f2 [/ A7 |6 m% N5 o" d4 n0 N13.5.4 接收并解析响应 514
    % M! j6 \( I/ S9 q; Z1 N2 v- O
    $ u3 A' ~: @5 f$ `13.6 与上游邮件服务器间的认证交互 514# z9 I. y' r9 N7 f
    6 B3 b; `2 T5 ~3 S. a# a5 i: {
    13.6.1 ngx_mail_proxy_ctx_t结构体  516
    / J: {5 p8 I" P: e2 c' d$ g: S6 j5 u  N2 z
    13.6.2 向上游邮件服务器发起连接 516/ K$ r2 e  Z, T' M

    + Y  a! X& [- g/ ^  g6 U& ]13.6.3 与邮件服务器认证交互的过程 518& z# H  t! b( J- V& \* |& e6 T5 C
    $ o/ b9 L5 P& Z, T0 O# [
    13.7 透传上游邮件服务器与客户端间的流 520
    ; _1 ?1 d9 `: G5 B1 E8 d$ T% E& a. z# m! q2 r9 M
    13.8 小结  524$ U  q8 N! M+ C; C2 D
    & V3 E% F  C% d+ a( p
    第14章 进程间的通信机制  525
    3 P/ }5 O% D! y$ U
    % R+ S# s% m. }! r3 D/ m14.1 概述  525* O/ t: |2 _! ]

    1 R4 G: g" @) C3 C+ p14.2 共享内存  526
    + z& L0 G$ x" P6 U& q, x, A
    : K8 g7 n! S3 D* T4 i5 \14.3 原子操作  530/ f, Z+ L1 Q6 B2 ^
    + |6 F7 H6 V1 U: p
    14.3.1 不支持原子库下的原子操作 530' I. a# c* x7 o' e

    - [7 }% C. R) K3 d& b) H# m! T14.3.2 x86架构下的原子操作  531
    # F3 b* d9 ]0 w% V! j' k6 I$ e6 ]9 d; G, F& [
    14.3.3 自旋锁  533$ q, M) O6 k: d" r  c

    1 P' o% B, h$ d/ e( N* b1 @; ?& i14.4 Nginx频道  535
    5 I$ q" U# Q( E& f& J5 W4 K) p# v
    14.5 信号  538! P) y, i! y5 H9 S- Y. c
    $ I) m, H3 L3 F3 K! s0 p. F
    14.6 信号量  540
    # {# C4 x1 J' b
    0 n2 m, w8 D9 n1 L3 J: C) Q4 a14.7 文件锁  541
    - B  B* L. L( Y3 |$ Q7 P( b+ h: v  R% R5 V; J& k
    14.8 互斥锁  5445 C5 a# ?' @( l' t

    : I3 q" |9 j% N* V( Q7 x: R14.8.1 文件锁实现的ngx_shmtx_t锁  546
    * q5 @  E5 S, I% f! r/ `: Q; R) \- s2 N
    5 K4 l* D0 V+ j5 I14.8.2 原子变量实现的ngx_shmtx_t锁  548+ D, i9 u6 h+ L% t  Q5 `& q; j3 H2 F

    0 {* O( A& m- b6 Z% n/ R9 H14.9 小结  553
    & b! J* G6 g4 P5 @- r; Z1 }, i2 ^+ [9 @1 f# _) |
    第15章 变量  554
    ' z: C) e. ?  Z" i6 Q1 R( o
    3 p0 E$ N; d; e4 h' ]) U# k15.1 使用内部变量开发模块 555
    % a# o. |* |  Z. e$ _$ k" N) w/ d) I% Z! H
    15.1.1 定义模块  556
    / E3 c1 i# D& ^& ?  @! w- k
    * V. E2 |! v! e; B8 T  s0 x7 z15.1.2 定义http模块加载方式  5578 L5 I, A# q; l% y5 i. X( {

    * r- y8 ]& ]4 i' O15.1.3 解析配置中的变量 5589 _1 _' n- ^! N: X. c; A& L$ H

    6 \- D  ]* [. p# d- b- S. H1 E$ N4 p15.1.4 处理请求  560
    " J4 S0 c* W. l, N5 u
    , e9 c& r9 y- R7 i15.2 内部变量工作原理 5614 V. [( D) u7 P: D; e% @$ F

    , a: f5 i* j  e1 m: _! w1 I15.2.1 何时定义变量 561
    9 [0 h& `' l  _) T( i$ I8 @. Y4 O1 B$ G2 a! h1 L% R
    15.2.2 相关数据结构详述 564$ ?$ H/ e4 O; S6 M' ~
    ' g9 |) R, Q: I( w- n
    15.2.3 定义变量的方法 572
    , X0 _6 k4 y% y% A4 ~3 C7 I$ D
    , A  J& ^' w" o9 c9 r0 O" D5 B15.2.4 使用变量的方法 572% c- b& n7 r* v- _/ C2 j
    ( U1 \% \( x+ A; Q( Y
    15.2.5 如何解析变量 573
    ' E( M4 q9 _5 k: C1 k& w6 {  t
    7 G. U% c* V8 D* a. k6 X15.3 定义内部变量  576* _6 h  Z4 Y5 r! K1 t* @

    9 `1 h) o1 c9 O15.4 外部变量与脚本引擎 5779 N5 F0 x+ x& [6 H0 q8 @
    - {; L4 I9 I' ~/ f
    15.4.1 相关数据结构 578
    " |- e$ `4 b8 t' P9 F1 E: p1 n1 L! ~* L+ L& K
    15.4.2 编译“set”脚本  581
    8 [5 [/ h  }5 I$ F6 H5 c% V4 Z# g) V, ~/ ?! d
    15.4.3 脚本执行流程 586" R: o! A& ]  e1 h6 S; I' s
    ; V& }9 }+ f' S
    15.5 小结  589' _6 d: G7 r5 j6 W! E
    9 q& S) F- o* E% O. t
    第16章 slab共享内存  590
    7 ?+ Q: P' U8 T5 ]7 Z, f
    ' q+ c0 K/ P3 y9 F16.1 操作slab共享内存的方法  590
    0 e$ G6 g( V; W4 Q* m9 c9 C
    , a0 t1 f% e& |% g0 s) D3 [0 Y16.2 使用slab共享内存池的例子  592# w$ O2 p7 N% t; l
    . ~$ p1 N1 Q6 V% q+ L% f
    16.2.1 共享内存中的数据结构 593
    0 V" X$ e* Z& j+ b1 Z3 c/ R# g6 q5 d8 S6 O2 ?  T/ O! k, p
    16.2.2 操作共享内存中的红黑树与链表 595. g/ J. K) g$ C4 U+ m  H, `
    9 l& X: a% B# L. J! C
    16.2.3 解析配置文件 600  s  ]4 e9 }3 R6 D

      O; A4 C. p2 p16.2.4 定义模块  603) V2 D6 `6 B& z( [& m8 S4 L

    6 S9 n+ p8 w( B- d; T' o16.3 slab内存管理的实现原理  605( K5 H* a/ R  C3 d+ e

    - M% D; H0 [- k" K$ k# S* E( n16.3.1 内存结构布局 607
      _, i' s; k9 b! n" f+ U1 u
    3 W7 ]/ c  m; c16.3.2 分配内存流程 613
    ) N' c4 n& v1 n  p/ A0 }% l: z
    - u& B4 L5 z0 m9 M16.3.3 释放内存流程 617
    * f5 R8 `3 s" C0 m- i+ w. J
    , {! n5 f/ s/ y# P16.3.4 如何使用位操作 619$ {+ k9 [  M* ?! y' u

    ) d- p" f9 h( t% a16.3.5 slab内存池间的管理  624
    % N& I" D2 t/ B) Q4 @* f* c
    2 d) Z! a! f+ P: V6 \3 z; N6 ]16.4 小结  624

    # @# S: E! Y) M- j* Y! }+ R9 g( Z6 k) i7 X0 H
    9 I: X" m3 ?) Z0 D" s

    , O! y; c' I" C- ~

    ; A) ~/ c0 E0 d; U9 n) X百度网盘下载地址链接(百度云):java自学网(javazx.com)深入理解Nginx:模块开发与架构解析(第2版) PDF 高清 电子书 百度云.zip【密码回帖可见】20200802更新
    / I& T" r) g0 U' }
    游客,如果您要查看本帖隐藏内容请回复
    * h5 v8 C0 J6 \( q

    + F  P: K# b" I2 g; Q6 w! L' h9 l. e
    回复

    使用道具 举报

  • 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 释放内存流程 6179 U+ k0 u5 E5 ^% z+ K5 ~9 Y3 a: W# s$ D
    回复 支持 反对

    使用道具 举报

  • 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-4-27 18:56 , Processed in 0.123778 second(s), 38 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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