java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 33692|回复: 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 ^( v7 o1 u" K8 E5 P2 u
    java电子书推荐理由:本书包括四大部分:第一部分针对初级读者,介绍Nginx关于获取编译运行的基本知识。第二部分针对中级读者,以一个例子为主线。第三部分针对高级读者,这是本书的重点,彻底解析Nginx架构。第四部分针对中高级读者,以Tengine的开源模块为例。
    * ]( X+ W+ O& T1 ^1 _
    - ^" q) g- S; R( s3 w0 o
    2 `7 d/ x8 d' L/ w$ o
    作者:陶辉( V9 ?% j: G6 d! q
    出版社:机械工业出版社* F* `, p/ l; l5 g' n: J, M
    出版时间:2016年2月
    ) u# N7 N" E9 H  h: M+ {& `! M) V1 e) K" ?
      `( z$ S/ N$ W# i$ D' f5 @: p( L
    QQ截图20160801140226.png
    5 {* k. Q$ R8 ^" v+ q8 y/ n6 j' ^: K1 \6 k2 f' I+ ]  T, n+ l8 T/ ], X
    - ?7 n7 U+ @6 E& c5 t! m! R6 y) V9 ~
    java电子书目录:
    / z+ B1 c2 R) q) H. k1 g9 {
    ! J. o( `* Y& A' r; l* \* S. V7 {  o- Z
    ( i5 i! n# P# ^$ V; E7 @3 x
    前 言1 A+ w) Z* b) g" Z7 m

    # Q+ D  @' k7 @" k' f第一部分 Nginx能帮我们做什么
    ) l. n2 r2 b) Y/ O6 U8 T; o( }3 `
    6 d& h9 K+ j" b+ ]第1章 研究Nginx前的准备工作  2
    4 R8 {6 `0 f) [9 E1 k% |" t
    ' r. b$ w; K: v9 p% A! a* f& ?, E1.1 Nginx是什么  20 \2 A0 L% C, q: ~* ~

    . d" P- N7 E0 o$ Y1.2 为什么选择Nginx  5
    , B' i. n7 C0 `
    5 H; O, W( l) }1.3 准备工作  7  A* O) g, a$ B9 ~' ]$ Y: l

    5 W; J) C+ Z6 {1 ]. J/ N0 h* s& D1.3.1 Linux操作系统  7
    * ?* B8 i; V2 [2 h/ V! k( v, g# \' v2 C
    1.3.2 使用Nginx的必备软件  77 b9 X! `( ?2 g0 _7 e
    7 v9 G2 l, r9 E( O8 w
    1.3.3 磁盘目录  8
    8 T! `! |. b) |6 C3 T/ G# q+ N) p, {0 f1 M+ W
    1.3.4 Linux内核参数的优化  9
    4 T' w5 i3 d# b* O3 C4 h9 a' v& L+ `. k  S9 q3 ^/ C
    1.3.5 获取Nginx源码  10# p0 z. S4 F' {! P- q; F

    ! b$ \. R( V7 }9 j8 V2 Y1.4 编译安装Nginx  11; j6 M8 g# _, ?! u/ Z3 v
    & `, g5 s! _9 P9 M' ~  T0 D3 Z1 W
    1.5 conf?igure详解  11
    5 K, y1 k1 N! V8 Q3 n1 Y9 p4 w2 f0 s0 W3 k4 B9 l/ [3 _$ J) z
    1.5.1 conf?igure的命令参数  11
    * F- t" Y! d; a2 a
    1 Z: W: x* y& |7 Q" {, g' `5 A7 I1.5.2 conf?igure执行流程  18  Q. q: M6 U- V+ l+ ]6 z

    , S. ?! A$ t1 R2 v: u1.5.3 conf?igure生成的文件  21
    2 n- G! f+ c$ d7 @0 @% {' z/ Y/ U% a* U3 ?0 p
    1.6 Nginx的命令行控制  23
    ! }2 ?! ~( k5 p' o$ a* e& g' e/ Q, w" ]( d. R  v
    1.7 小结  27% i* i$ Z  L" L3 q! w7 e2 _% v- Z
    7 x7 ?) P4 @" W6 i  u! w
    第2章 Nginx的配置  28
    ) N7 m% K& f) l) D9 E8 S; C3 i" J4 B: p2 K( J4 D: U( i
    2.1 运行中的Nginx进程间的关系  28# x  L, [& l, e, V+ e: Z

    0 d5 w2 v/ V8 n: r2.2 Nginx配置的通用语法  31
    % `: t. i8 T' w2 {0 \! r( q$ B* q" @, V( b! j
    2.2.1 块配置项  31( L' x6 o) a( V# {0 J( [+ X
    " L! `5 v- e4 b# S) w# m
    2.2.2 配置项的语法格式 32$ O  f1 H" s! f  r

    0 x, P& B5 s$ R( J" O, J2.2.3 配置项的注释  33
    ! R2 s/ m5 \! ]0 w! e, W, H3 C% C+ ~7 Z0 D+ P) N) E
    2.2.4 配置项的单位  33
    , z2 a6 m; y0 d* K) H% j; S4 m9 n
    " ~0 m1 t2 U  @, h" S+ S4 j2.2.5 在配置中使用变量 33
    * b* Y8 E) `% M. i5 G8 J3 k3 N+ i2 N" n) k- q
    2.3 Nginx服务的基本配置  34
    $ l4 b7 [/ K( G5 K
    1 w4 i8 P7 A" e2.3.1 用于调试进程和定位问题的配置项 34. T! B  a( O9 q9 q
    . x0 S8 [+ Q( t3 U' a6 `5 h
    2.3.2 正常运行的配置项 365 Q1 P7 C6 C8 |- E* P3 m

      t3 e( L6 h0 W3 M" h: N: Q1 \0 [2.3.3 优化性能的配置项 37
      r' w4 S8 S( x2 S% V! i& `4 H7 e$ i' d! c4 v8 H" E
    2.3.4 事件类配置项  39
    4 m1 ]: E9 [0 k% n$ r  ]+ @3 }7 @: N! k8 }7 _- ~# Y0 X! |' H
    2.4 用HTTP核心模块配置一个静态Web服务器  40
    6 m' D! W- p- E. D5 i4 ~
      V+ r: k- d3 f2.4.1 虚拟主机与请求的分发 41* O3 s5 v% B, N( }
    1 ?/ {+ i( u# g( B- D- p5 i8 u" ?9 _
    2.4.2 文件路径的定义  45$ X8 {# w# e. h- F
    0 c4 a, ]! E7 ?; w6 C
    2.4.3 内存及磁盘资源的分配 473 c, z0 R! M/ ~, R5 W# z
    # g- p, D; @: M
    2.4.4 网络连接的设置  49
    5 p. y) D$ S2 w' p- R9 v
    ' Y6 ?5 K! x. H5 R: Y+ U$ c2.4.5 MIME类型的设置  52
    9 D  d# w2 c( n' U) `& V5 X' X
    7 @' |/ F5 b% s- F2.4.6 对客户端请求的限制 539 a# C/ w% I) M( P8 R
    5 C- A& T  o, e
    2.4.7 文件操作的优化  54
    0 I8 U0 d) Z1 [; Y6 s5 c  M  R  ^& ~/ @! a) D5 o$ W1 k
    2.4.8 对客户端请求的特殊处理 562 Y1 {' s# J6 ~% \' l

    5 v" E/ N* U! j2.4.9 ngx_http_core_module模块提供的变量  57# ^+ O: r! c- K  D1 I: D
    , D# s4 @8 N# A2 [1 n  C* Q3 j. |& F
    2.5 用HTTP proxy module配置一个反向代理服务器  592 t2 X% P7 a% t! ], S7 t
      Y7 ~) {1 g! H
    2.5.1 负载均衡的基本配置 61
    ( X. E& k, c+ \
    / g8 F% j4 m) _* r2.5.2 反向代理的基本配置 63
    5 V3 d. m2 a, [2 \) Z7 T: v( Q
    7 r- v9 T, T& P2 w2.6 小结  66( V+ d) g  D5 K7 e8 f9 S. U7 r' n# F
    & D; e( p  Y5 W) T. W0 C" d
    第二部分 如何编写HTTP模块
    ; ?* C; u" @5 C
    $ L% g8 \4 E# F第3章 开发一个简单的HTTP模块  680 ]! ~" l3 Q8 ?8 g

    * N2 H7 c9 i- w, d3.1 如何调用HTTP模块  68
    5 E, A6 v( \, X1 `( N! ]' d! s
    ' m0 `& p$ E" s2 Z3.2 准备工作  70$ F# `$ C; R! n

    , j& j. F* N/ a( Y9 g1 `" d* N3.2.1 整型的封装  71- J4 [% }3 p4 g; H  n! e& O/ o. ?

    3 n- P8 G* n( c- N% h9 |  }% o2 b3.2.2 ngx_str_t数据结构  71
    ) e# ^4 c- l3 j  D8 c6 w
    $ ]$ o5 v( l) }  Y, p+ I' P3.2.3 ngx_list_t数据结构  71* x" h& L) n4 V1 l3 n
    $ J, S/ a6 B% a, o
    3.2.4 ngx_table_elt_t数据结构  75' {: R8 x# j- p) x4 f

    " g( L9 j) A  Z& }3.2.5 ngx_buf_t数据结构  75
    . v$ B' W8 C' m  X& f( E  X% E, d( a% k% |, s6 ]: R, N5 U
    3.2.6 ngx_chain_t数据结构  770 t0 Z8 w0 Z. S

    ) O" Z/ U  e+ B) T* Q4 E$ \0 F5 z4 }3.3 如何将自己的HTTP模块编译进Nginx  77
    2 o7 x7 q* O7 [0 F9 O5 j
    " @8 \3 c' v8 e$ E  I3.3.1 conf?ig文件的写法  77* b1 t$ P$ l; J1 _( M, X0 z& w5 F

    1 N+ P" \2 n9 U" P. b% _% ^4 {3.3.2 利用conf?igure脚本将定制的模块加入到Nginx中  781 [, w" k3 p, l+ f
    9 H* a4 h0 k7 p2 p) M/ s  A
    3.3.3 直接修改Makef?ile文件  81( G9 M. K* Y! A1 o5 @8 R
    " D/ e* Z% r' t9 E9 o
    3.4 HTTP模块的数据结构  821 E/ S- L$ m) v
    * ^5 H8 t$ y8 U
    3.5 定义自己的HTTP模块  86
    8 X: ~. T: h. `8 O* A2 j2 r) A; H- w% G( \& T4 s7 o. r7 x7 k% _
    3.6 处理用户请求  89
    4 [1 K' ]- Q" Y; {$ m% Z2 V. i/ A' h0 t) H# _
    3.6.1 处理方法的返回值 895 Q% O& i8 ~; p: t6 x

    + k6 d% [+ I/ b) m; r3.6.2 获取URI和参数  92$ L! \) J* L& f3 {3 c4 I

    ! @* V) s6 H0 Y+ P3.6.3 获取HTTP头部  94
    ( I4 c6 [; Q- U- m& {, U0 M) R; x
    % l& j6 v1 V+ i* o3.6.4 获取HTTP包体  97
    1 h9 d0 B, q: q2 Y  E! P/ z2 @* d" }# y. `) @" ]' X
    3.7 发送响应  99
    4 G! U3 E6 M) B5 L5 }0 s6 u
    + }: U, _9 I7 i, |1 K' x6 S+ q3.7.1 发送HTTP头部  99
    5 t% i1 S5 l+ e5 {4 Q$ D+ F" W
    $ w+ B) }. Y2 t( q2 r4 s3.7.2 将内存中的字符串作为包体发送 101" `9 s5 V- H  D/ q2 \0 o* z

    ; F( X$ h9 ~5 D3.7.3 经典的“Hello World”示例  102; B/ Q; D2 ]4 |8 G7 f' [; x

    , ^, y! ?! Y, `) I. J3.8 将磁盘文件作为包体发送 103
    * F+ L& E+ [% \) z! w
    3 r! C7 v6 J# J" ~% H3.8.1 如何发送磁盘中的文件 104  f) M/ M/ c8 S+ a* K
    # M: T0 Z! ?$ X
    3.8.2 清理文件句柄  106
    : W% s7 M( P/ d7 {% R. F9 s% k* f% w# g5 Y; L: n1 R5 U8 v6 q4 A
    3.8.3 支持用户多线程下载和断点续传 1070 j4 N! m7 a6 q
    ) P1 e# e, o7 w- U
    3.9 用C 语言编写HTTP模块  108
    - i& _5 c7 ?; b4 L/ F: n0 t
    * D$ @9 z2 P( B1 G; M: L3.9.1 编译方式的修改  108! |3 t# W; {1 a: V( A1 y

    ; L) h; v! r# B& ^3.9.2 程序中的符号转换 1093 j4 \& o5 r4 s2 ^6 t6 _
    1 E2 j: Y3 J( Y. V( P% E* V4 Y( _# X
    3.10 小结  1108 x0 r3 L/ [3 y# v5 d! L3 J
    ) u% ?& h* `- l$ V
    第4章 配置、error日志和请求上下文  1114 d3 Z; z/ }& y" a/ ]  i

      |4 h' |! w4 e4.1 http配置项的使用场景  111& X) J8 k8 N6 `  A/ A! S7 X
    7 @( n+ U& e" F* P
    4.2 怎样使用http配置  113
    - J8 N8 t, P( ^$ q( c
    ( F& C- }- T5 s5 P0 {/ t4.2.1 分配用于保存配置参数的数据结构 113
    . c$ j5 }% Q6 n. z; z4 V
    0 V7 G, F7 B6 x2 }- O: @4.2.2 设定配置项的解析方式 115
      H6 j; D6 K% \; ~# [& s8 h6 V% e
    $ S9 x! j& O8 ]4.2.3 使用14种预设方法解析配置项  121
      U) T+ |1 h+ L
    " N. L& r6 q6 D. q8 X' J4.2.4 自定义配置项处理方法 1311 A- a8 s0 w1 ^7 V
    ' b2 i* f7 n; Q: P3 [
    4.2.5 合并配置项  133& d# l- h" ?7 `0 g, F& g1 b$ n. ?

    0 c6 l" A! j2 ^9 d0 a! l4.3 HTTP配置模型  135
    , H! ^% W4 x8 d2 S0 S
    / ?1 Y/ J5 g  G4.3.1 解析HTTP配置的流程  1367 V6 H$ G: m! y" A* j; J

    " M$ H  c% y0 _0 X6 \4 b4.3.2 HTTP配置模型的内存布局  139
    1 ~0 I# w! G" A) a) C
    ( [) C3 n' o( o/ U- ~" z- a4.3.3 如何合并配置项 142
    * {# k5 r" \  Z" P" M1 h! g( ~7 {/ D- M+ [5 ]" z
    4.3.4 预设配置项处理方法的工作原理 144
    4 m( _% {# D/ i. N5 ]! J$ r) A" [$ B
    7 F' V6 j. y; @# s( m: [0 Z9 L1 J4.4 error日志的用法  1451 A* T+ a+ z3 B0 e& D# L' Y

    * c2 [0 K! k) h; |4.5 请求的上下文  149
    5 t4 X3 [& [2 X- n8 w
      p* q9 _* ?) |4.5.1 上下文与全异步Web服务器的关系  149( n/ Y7 n( C( d. U* \& M/ s+ P9 z
    % b$ Y; l* U' V
    4.5.2 如何使用HTTP上下文  151
    + v$ Q6 s0 O) g3 U7 I% \/ ]2 |2 B$ o
    3 M, U: T6 K8 e4.5.3 HTTP框架如何维护上下文结构  152
    % F. ~6 E- M0 d. M: _* F' L, \; H* [# S& U7 U
    4.6 小结  153
    6 R0 q5 [- @. w  W, S/ U) }& ~
    , Q9 E$ R+ i% E1 y+ C% b第5章 访问第三方服务  154% n8 l( I7 u8 y0 o: B. T  o/ }$ J
    % ~: T$ `* n) A7 V
    5.1 upstream的使用方式  155
    7 z3 M3 h! K4 K2 l2 l
    ( x# z/ y+ Y3 H, B; Q5.1.1 ngx_http_upstream_t结构体  158$ g* r" {9 C7 l6 b( G

    " f; w) n3 P7 z4 m0 g( }2 H5.1.2 设置upstream的限制性参数  159" E+ n! {' p: k( b1 A

    . n& U* Z5 d0 c0 T4 Q6 q- x5.1.3 设置需要访问的第三方服务器地址 160! [! G" L$ a4 ~4 E) P% ^9 C
    2 p, p; w% u; O# u% s
    5.1.4 设置回调方法  161
    ! V( |) y- G4 t& U3 L" B/ I" e2 ~
    & m' l0 W9 s# G) L: y5.1.5 如何启动upstream机制  1611 s6 k8 S! s4 \, C" x" I
      k- K; z4 f' d5 K
    5.2 回调方法的执行场景 162
    % O& Z3 w2 _2 I) m( m5 P% M
    * W1 a  n3 u  X; Z5.2.1 create_request回调方法  162
    3 j0 o5 V4 {# `) Y( a) {0 u8 U, T, J7 `- e. h9 v# k
    5.2.2 reinit_request回调方法  164
    6 x. }  g9 I6 k4 ?6 ~! \- P# M: q$ s( P% D
    5.2.3 f?inalize_request回调方法  165$ P, k. _6 p0 k  i# M" Y

    $ s) |% ~7 h' v5.2.4 process_header回调方法  1652 l9 ?- B" d* V. x  B

    . j9 h, m& |4 J' K  D3 N, z6 h5.2.5 rewrite_redirect回调方法  167
    6 ^2 d0 F3 U  c
    0 C  h4 \4 x5 a, s* H8 G5.2.6 input_f?ilter_init与input_f?ilter回调方法  167. Z# C3 {: w  ^* i% m/ B7 g3 V
    6 ?: a: l  M- f& e
    5.3 使用upstream的示例  168
    9 v2 x  i3 D7 X4 U, {# Q9 Q+ @2 F) s: w2 K# v
    5.3.1 upstream的各种配置参数  1684 L: J# Z3 d! o8 h; @7 j8 d

    ) M; r7 C# ]( f' N5.3.2 请求上下文  170! Q& n, g0 N5 V: D
    ( t; L; U9 s) N1 {
    5.3.3 在create_request方法中构造请求  170$ l. w) Y4 f3 T# X7 A5 X1 u7 n# s& n2 i
      W$ m$ B1 y. M
    5.3.4 在process_header方法中解析包头  171, y  O+ T, V. o. z! }, @/ }
    / ?, j; f$ [' G; o. y
    5.3.5 在f?inalize_request方法中释放资源  175
    . R* W" g, n' M* A1 K4 O- Z
    , r6 U: @; J! C* d0 t4 k5.3.6 在ngx_http_mytest_handler方法中启动upstream  175+ ?/ m; z6 Y& I+ x* S% O
    8 E  ^; Z2 d% K9 q6 ^
    5.4 subrequest的使用方式  177
    ; o0 [+ x9 O2 Z" M9 q/ q4 E! x' l- o5 E9 f  E& X
    5.4.1 配置子请求的处理方式 177) b# q$ e2 a% e4 @
    2 b9 Q- I' C) a% C
    5.4.2 实现子请求处理完毕时的回调方法 178$ O- a! e$ `9 o

    ! ~+ q. ^+ c' k* K  q' C5.4.3 处理父请求被重新激活后的回调方法 179
    - Q0 {- B: v6 ^* x- q
    ! x- N. f" Q4 k2 l& s# [" J( a" t# {5.4.4 启动subrequest子请求  179
    : G9 I! ^, H( C
    5 `- C4 l& k& K: n# S' z; @5.5 subrequest执行过程中的主要场景  180
    1 q" Y# Y/ e/ P6 Z; h: U# E6 v& m1 i' ~0 ]) s8 [& ^4 N
    5.5.1 如何启动subrequest 180
    5 \; Y5 a; g2 b' `4 r: t& b- j% U; I0 \" q
    5.5.2 如何转发多个子请求的响应包体 182
    0 I2 W3 q' S, i7 f* N( Y, N
      q( U+ h8 w4 v5.5.3 子请求如何激活父请求 185
    # n  L) [) |5 p9 u# p* x3 W) p
    5.6 subrequest使用的例子  187' I+ ~7 j) ^  ~2 F2 k
    / t8 t7 ~* ]8 n5 d# V
    5.6.1 配置文件中子请求的设置 1872 _/ f5 |- g( J
    # R7 J: h2 ]' k3 O
    5.6.2 请求上下文  188
    4 ^* y  M0 @) o, B
    2 u/ [  Y8 T7 Q+ o5.6.3 子请求结束时的处理方法 188- p# F( F2 t0 `2 q. B" e3 O
    # u2 n! ~- l, u2 r0 V, T
    5.6.4 父请求的回调方法 189
    ! O; Q! X0 o% S. e2 L8 }
    9 O( ?. w5 k) b9 D: {5.6.5 启动subrequest 190
    5 z1 s. ?' C' p
    " A- J& z# {! ]2 f6 l1 |" Q- F5.7 小结  191
    ( B+ r7 e. {2 q  j) ^; X7 R6 M8 s  |9 P. p& Q) w$ P
    第6章 开发一个简单的HTTP过滤模块  192
    3 |0 T" N+ D  ~9 E, s3 Z2 z, r1 @# K
    ( x7 i! P2 H* o5 `% D6.1 过滤模块的意义  192
    4 C# c" @" j: }  d0 i3 q
    ( N: ~- o6 m2 Z  |6.2 过滤模块的调用顺序 193+ _1 q* v5 u0 r. \( \) A
    ) b# A. y. o3 h, N7 m; r$ R) d+ f+ C
    6.2.1 过滤链表是如何构成的 194
    3 E  ~2 G" Z7 j  s+ J
    ; U  U1 c5 S4 b9 U  z9 ~& q& E6.2.2 过滤链表的顺序 196: f3 G% Y0 R8 N$ B5 V
    , R- b7 }0 Y4 }: B8 q  D
    6.2.3 官方默认HTTP过滤模块的功能简介  197# ?0 L2 w0 G6 I- x. D  p. v

    , u* e' R# [4 u% y. }9 a6.3 HTTP过滤模块的开发步骤  1988 H+ r2 B" u5 w9 g5 r+ n

    0 ~* c6 ^3 A4 l4 p8 K" H7 H+ k: v6.4 HTTP过滤模块的简单例子  200
    * m' d& u6 d$ ]6 v
    3 |8 m' v  ]& m7 m, L6.4.1 如何编写conf?ig文件  201
    4 x3 Y& Y+ q) g* j* E; L( P) B0 t2 e5 `) `4 w0 ]7 b
    6.4.2 配置项和上下文 201, I; c3 V$ o7 j8 `6 _: y1 G1 h% V

    2 k" i4 A1 Y9 N% b+ W! @6.4.3 定义HTTP过滤模块  2035 e/ S8 `! x9 b1 p; Q% w) n/ h

    * m5 X; r! z3 {5 l7 I8 I( w+ W7 h6.4.4 初始化HTTP过滤模块  204
    . J+ g! _1 Z5 _/ o0 t, }
    2 o$ j/ Q  c  C8 k( a  t6.4.5 处理请求中的HTTP头部  2041 A6 f' f6 a/ [; a% m4 i  @# O
    $ U( P7 W0 K( o3 J, S6 X
    6.4.6 处理请求中的HTTP包体  206
    ' ^( J/ _9 P, S7 r4 S% C  E) T& p. p% c
    6.5 小结  206( h, E4 T7 _9 j. M

    4 F7 j* w4 S% a8 C第7章 Nginx提供的高级数据结构  2072 Z  Y* h2 p3 j3 \( {: E# T

    , [4 w+ q  w& S* P$ \8 e7.1 Nginx提供的高级数据结构概述  207
    - k& o4 s: ]: T% I. u. L7 U# R, \  g9 S. r9 ?" w0 J! O
    7.2 ngx_queue_t双向链表  209& G  `* f9 M# r) |  F6 S

    & K& \3 A# x9 d& p7.2.1 为什么设计ngx_queue_t双向链表  2090 H6 s( W0 m: `, c$ {& r8 G7 B
    8 M% C$ r! }: e) h# F+ P( R1 ~
    7.2.2 双向链表的使用方法 209
    # Q& X: H; F5 ^/ g* W: y, U# g/ v# R7 Y  I! T) A  @
    7.2.3 使用双向链表排序的例子 212# M' G5 c3 j& K  }% ?$ g  \
    7 \8 {0 W1 Q+ s& u" S) d' [4 s
    7.2.4 双向链表是如何实现的 213
    9 L, v; v. B% Y. |# m
    , x4 f' l# _; c* o7 E9 R8 I" u9 C7.3 ngx_array_t动态数组  215. R, E" l- ~+ R1 |, v: q
    9 f5 u  r4 O  F/ [7 N$ R
    7.3.1 为什么设计ngx_array_t动态数组  215  z5 U7 l! c$ |- V* c

    , i% m: T6 e1 g. U0 u% a7.3.2 动态数组的使用方法 215
    9 z- _7 G: h# x" @' r  \5 }: H; n6 {0 T
    7.3.3  使用动态数组的例子 217
    . a9 \' v5 A; H# }# U4 O+ \  x. l
    7 s2 l) F# f! A' S% E1 G- }7.3.4 动态数组的扩容方式 2185 F- e$ z* R, g% y$ ^+ l$ e0 b
    9 T0 {: t$ p  Q
    7.4 ngx_list_t单向链表  219& c/ _; d0 m' ]( E0 s

    : B, _- y$ d; A: }7.5 ngx_rbtree_t红黑树  219! G: N1 m) G$ B) W) q9 r3 X

    5 o& K6 n, H2 |( `5 ~, M7.5.1 为什么设计ngx_rbtree_t红黑树  219
    ( q  F% V1 P' `( T; `5 E2 Q; b' W) M" o& O
    7.5.2 红黑树的特性  220. Z* i; e/ L# V5 w' \
    * @9 d3 P. v4 Q; p0 J9 X
    7.5.3 红黑树的使用方法 222
    / H- |7 Z9 W# j4 B; A/ V
    & y9 e# i6 F( P: V1 s1 |7.5.4 使用红黑树的简单例子 225
    & O6 e2 @4 a0 D" [+ U8 O  G- s8 D* I* H  _& V( l
    7.5.5 如何自定义添加成员方法 226
    9 z0 F, r7 _# W
    4 k: L/ A8 C5 d, ]7.6 ngx_radix_tree_t基数树  2281 ~: L3 A- R  Z# |: t
    * C5 l* G+ [1 o+ ?
    7.6.1 ngx_radix_tree_t基数树的原理  228
    # Y' P) U1 _) a( d" b" ^" K- C/ x( s+ C  ]& s& s0 K* h
    7.6.2 基数树的使用方法 2306 p6 f% D2 `! s( o

    & R7 E0 @  C$ p( z8 S, R7.6.3 使用基数树的例子 231$ Y& V# [) Z* A( T4 d( z
    + T! k' z* F: ^8 m7 [: n
    7.7 支持通配符的散列表 232) ?2 Z+ d( B: f. q6 N& d
    % C; Z: m' ]" `; c4 S' D6 y0 g
    7.7.1 ngx_hash_t基本散列表  232
    ' x3 W# [1 O, ]6 ~; z! g% u# T1 ]5 E
    7.7.2 支持通配符的散列表 235
    / i* j7 d! `( J* ]/ u. S& [/ b! n7 |# @* l( `
    7.7.3 带通配符散列表的使用例子 241- P1 c1 R  a# T

    3 S  r, Y) A) g4 B0 T7.8 小结  245. a( n. _/ f  _/ t# N% ?
      ]  _! K4 H4 R& W* t
    第三部分 深入Nginx
    : p+ u/ Q9 k! K' r* u
    : [% B2 Y6 t* P: J第8章 Nginx基础架构  248% p3 a  G3 r) \

    & H% i  t' \6 f) w9 |8.1 Web服务器设计中的关键约束  2492 p6 R' Q6 \* v

    ) _- n' Y/ ^6 D5 {! u% ]+ u8.2 Nginx的架构设计  251
    * B9 ~1 q7 Q- e4 h5 S( Q
    ) W) S3 X8 y8 O, U$ C& V6 K8.2.1 优秀的模块化设计 251
    ( _! H/ `1 k$ W! ^8 g& z% s
    ' b( r. H7 u& ^4 B8.2.2 事件驱动架构  254
    7 E/ d# U) ?. B
    ) o# s% N, M" b2 B% C) E8.2.3 请求的多阶段异步处理 256
      r3 s; T) u( T" w6 A4 W/ U& V( C& g* J8 V# E7 b3 `/ E+ k/ U6 y" t2 N
    8.2.4 管理进程、多工作进程设计 2590 \8 v% q& Q2 Y9 L" w+ t
    # w' f+ c9 e/ L: |
    8.2.5 平台无关的代码实现 2597 j4 ~( J* v$ E& w$ a

    - d- c. e: n3 @: B& G% [) Y8.2.6 内存池的设计  259
    ( a- v3 q: u4 Y1 r! ~& R
    + N. u' M* ^+ }6 G3 d8.2.7 使用统一管道过滤器模式的HTTP过滤模块  260
    - W/ |. X' V% d5 _4 I
    7 ?" q! k% p6 F7 ]8 F3 i8.2.8 其他一些用户模块 260$ x+ I: u9 P  {. [/ j/ @

    7 U( ?# v* c5 m8 w8.3 Nginx框架中的核心结构体ngx_cycle_t  2609 T5 g4 u- E& S! A- Z

    : G+ T6 c# a+ n( Q6 ]8.3.1 ngx_listening_t结构体  261' O$ `+ N) B8 Y  @6 i

    3 Q! t0 C1 P. {& r8.3.2 ngx_cycle_t结构体  262& B) d: g- }( y; B; _% [
    8 P$ g' ~) l' ?! r/ h0 G/ S
    8.3.3 ngx_cycle_t支持的方法  264
    2 G- o0 ?7 \5 f4 I5 }
    # ^( L/ Z. p- Z8.4 Nginx启动时框架的处理流程  266  A% w$ D& o. w. S& d5 `
    5 ]& ^/ l1 c9 {
    8.5 worker进程是如何工作的  269
    0 Y0 @. A7 J! Z" o# x# u# K- X0 Q7 u8 O  q1 @1 |
    8.6 master进程是如何工作的  271
    ! k9 R! D3 y& k8 D8 S# u6 Y1 ~0 i- n
    8.7 ngx_pool_t内存池  276  i, f0 ~& i) I" n2 d3 u4 ^8 q

    ; l8 L- R  F3 x3 Y( f: p8.8 小结  2849 O  D( q, x( M! X

    8 r% ?/ Q6 `8 M9 w第9章 事件模块  285
    % ]! n) s1 M5 e: J1 Q2 D; i$ }$ t$ r: [- S1 m
    9.1 事件处理框架概述  286  {$ p. I5 s7 S- A) _
    # A8 n; v+ C7 j4 J. u
    9.2 Nginx事件的定义  288
    2 J- Q+ b8 U- ?* }- {
    / B- r% k/ T% j( Y. Y9 v+ T- l9.3 Nginx连接的定义  291, k0 @: p' S5 v; p+ J' T& e
    5 S# f# s2 x8 }# N8 q* B
    9.3.1 被动连接  292. q: f6 T, [6 ?6 J& p5 L

    4 T- Z$ ^2 I. J4 G: {+ l" A2 z1 D9.3.2 主动连接  295
    + V0 C2 U  s6 }8 X& B7 x
    ; ]9 R! L9 }( P" p3 r: ?" A. ~9.3.3 ngx_connection_t连接池  296
    + i  @: R. p# q6 d' b5 D# v% K. ^" i' Z; Q% w- G+ S% D+ R
    9.4 ngx_events_module核心模块  297' {4 q; M0 I! E- k& l0 `; d

    ! M5 b4 \/ p3 b& i0 m" Z9.4.1 如何管理所有事件模块的配置项 299
    5 g" j! Z0 Y& L' ^& {5 \) T; ?: i$ }9 M3 S0 z1 i2 b
    9.4.2 管理事件模块  3002 w: D: J2 h* s; R

    & B  v- h: x/ i8 h* D9.5 ngx_event_core_module事件模块  302, r# l. X7 T* m) C
    8 M; \' G. `: [3 s- D& Q. H
    9.6 epoll事件驱动模块  308  S: D6 \7 Y$ w4 u
    & ?/ p( S6 x8 t2 L
    9.6.1 epoll的原理和用法  3083 c" ~# t, z$ R* b4 m+ ~4 u/ Y! _

    5 \0 [$ h; A! Y4 D9.6.2 如何使用epoll 310
    * G7 a. g/ w7 E9 J  w8 ]
    % ^3 o0 r; G6 z! n0 G2 x4 W9.6.3 ngx_epoll_module模块的实现  312$ f* H- B) \( u# {5 E2 ]* R
    2 y! U/ L6 Y/ d" d2 w- m
    9.7 定时器事件  320+ u8 S0 b9 h* ~  L
    + ]( D0 E+ s0 |8 l* g
    9.7.1 缓存时间的管理 320$ i2 R! q  E* L" x
    1 I. e2 j' ^4 q5 u) z6 \
    9.7.2 缓存时间的精度 323
    ( w4 d, y3 O& Z$ c
    ) J& m/ S6 w- ~8 R3 @9.7.3 定时器的实现  323
    9 l/ A3 U4 e1 V: s' y- v1 K
    6 M! n  ~  E' d/ v9 S9.8 事件驱动框架的处理流程 3245 O" e% q) g. ]. X2 G. h
    5 ^# j" T' L. U6 ]: |* o5 s
    9.8.1 如何建立新连接 325. X( n8 |' \9 c# Z7 j
    ' i  W: x! ]- N* P. w" G  I
    9.8.2 如何解决“惊群”问题 327
    ( m6 M5 @4 Y' ~
    ! E& S6 q6 d/ @9 j5 J7 C' n9.8.3 如何实现负载均衡 329) Y' u' T# q5 q6 |
    1 L8 ^1 x5 @8 |# u
    9.8.4 post事件队列  3306 r4 c6 K, E; ~

    7 k. F; m! f9 z: b+ i) H* S; _9.8.5 ngx_process_events_and_timers流程  331; n" a# c" @7 z8 j9 k1 A$ I* k5 }* w

    , c, S3 d& c  u5 F. o1 l* b1 W" W$ @9.9 文件的异步I/O  3342 y) A! x6 }3 ]7 S

    " E6 E- `2 H! t% F' p/ t8 N; Y1 \9.9.1 Linux内核提供的文件异步I/O  3350 C* ?+ Z5 d* {: \5 h6 u

    . t$ I2 e3 V/ _9.9.2 ngx_epoll_module模块中实现的针对文件的异步I/O  337' u+ K6 h1 [8 S$ W4 Y0 S  o
    % z  u' z; j# v( f
    9.10 TCP协议与Nginx  3428 D& Q* w) e1 U" Z3 H
    ( o1 ~5 c, V! R
    9.11 小结  347
    " K$ L9 Y2 n# B' k
    ! H% U5 {& g! v/ U- T/ E+ g第10章 HTTP框架的初始化  3485 f5 d! S! N6 N  x/ {5 ?

    : q( ^/ i) o) {9 w# F" H7 u10.1 HTTP框架概述  349( O" a! ?& h- ?+ H+ p2 I

    2 c* A# \- H9 g) ^7 ^' ~5 E% m# e10.2 管理HTTP模块的配置项  3522 X. p5 n/ s; n  V, T
    % U# b' s$ X- L7 S# C8 D
    10.2.1 管理main级别下的配置项  353- T. J$ U1 Y# {1 [

    - ^% A( S- c2 O  w0 C, x10.2.2 管理server级别下的配置项  355$ U$ q- |$ Y& \4 t

    ! w8 s9 C( R' c( X1 z, U3 P10.2.3 管理location级别下的配置项  358
    % p" U2 o  k+ v/ ^7 R5 Y) c: c" d
    : B! n- V1 W6 ^4 R1 k1 S' B+ _* f10.2.4 不同级别配置项的合并 364/ E. K% A& e3 l; c+ J9 F7 ]
    " g* O! X% G7 n$ Y2 e: {5 @
    10.3 监听端口的管理  3671 J0 P/ C- F* Q: H1 ~4 [6 w
    : p7 u, s+ N7 \2 j& z( J
    10.4 server的快速检索  370, v7 ^8 W' J4 b. Z$ {3 E4 T! m

    % B$ [4 H& u( l. o' Y- t10.5 location的快速检索  370
    ' T. w# @2 _; @8 \& \$ G4 p) p# p! g0 ?$ C1 N
    10.6 HTTP请求的11个处理阶段  372
      K, A5 D& L7 `! ~4 L2 v6 z
    ! T" f$ P# F8 c, `- D1 h8 Q10.6.1 HTTP处理阶段的普适规则  374
    7 J0 [, P, T# ]+ F, R2 B2 @6 o1 M% z1 b% G. I1 f9 Z, w
    10.6.2 NGX_HTTP_POST_READ_PHASE阶段  375+ \2 R; B2 p+ c% i
    * z& {5 X! T* x7 ~/ N- M
    10.6.3 NGX_HTTP_SERVER_REWRITE_PHASE阶段  378+ \5 v/ F0 _  }5 ^# G. Q- @
    ' Y  }! n# ?& u* @
    10.6.4 NGX_HTTP_FIND_CONFIG_PHASE阶段  378; E2 v1 T) k( ~: B: h: ]; |1 P
    ( [* O  D" F+ \: o- O7 w; W0 _7 v
    10.6.5 NGX_HTTP_REWRITE_PHASE阶段  3789 q( E$ h9 ^3 E

    * X! G! \2 u; b" S7 ~) I; ^( `10.6.6 NGX_HTTP_POST_REWRITE_PHASE阶段  3791 `: d3 m# _: o. A$ J9 U

    ! T0 u) R4 V3 }* O* s" B8 }10.6.7 NGX_HTTP_PREACCESS_PHASE阶段  3798 ?8 l- I$ _; L% N& k

    6 }3 V  ~9 k) o1 _0 X10.6.8 NGX_HTTP_ACCESS_PHASE阶段  379
    9 J9 U) ~6 e4 z$ w* c9 w
    9 [  N! l9 K7 J! q* B* S. q% w10.6.9 NGX_HTTP_POST_ACCESS_PHASE阶段  380$ D. z$ x5 L% Z# `1 D" J
    : s5 E: `6 \7 G' o# U2 d! g
    10.6.10 NGX_HTTP_TRY_FILES_PHASE阶段  380# d( E/ [; v. g

    " D6 O7 w2 k& {6 s6 ]% B/ N2 }+ N7 V1 S/ a10.6.11 NGX_HTTP_CONTENT_PHASE阶段  380; J  D5 n( G2 D; P$ S" u

    , [+ l" k$ ?% Y6 s10.6.12 NGX_HTTP_LOG_PHASE阶段  382- G; ]# G1 S' I9 r
    # s& F: i: q$ P0 p7 c
    10.7 HTTP框架的初始化流程  382
    * s0 \3 d( e7 Y, F, ?4 Q0 a: U
    ( Z( f* y0 B: m$ ^- `' s10.8 小结  384
    ; o9 j% h6 y- P1 ?/ g
    6 ?7 T  W. ?- z7 Q: x" a) M第11章 HTTP框架的执行流程  3856 @) f% h5 t! D$ }2 K, v

    : q6 W9 r: R6 ~/ X* _& c- r" W1 k5 D11.1 HTTP框架执行流程概述  386% }8 ]: o% `7 E9 J- s- o

    & |7 K' D+ f3 G5 _11.2 新连接建立时的行为 387
      H( X, t! z# ~7 H+ Y- o
    ( {- ?: `# M. R1 W5 {* O: k11.3 第一次可读事件的处理 388. h, t1 E$ d  d- r% c
    ) }* ~4 h' z/ h2 G" s9 [# g
    11.4 接收HTTP请求行  3944 c- }6 K1 U; J

    3 m5 ^1 {; e5 n6 s11.5 接收HTTP头部  398
    ) i5 |* J' j3 h7 [1 ~, j& u2 x# M" r) }' |/ L  M
    11.6 处理HTTP请求  400  Z% G) @5 n# @$ M! u# |
    4 V! Q: I, R. I
    11.6.1 ngx_http_core_generic_phase  406: x. ]; j  _. A! g' B$ w

    - g( m! m; P. K* B6 Y11.6.2 ngx_http_core_rewrite_phase  408
    / N8 M' w! W7 Q2 q9 r5 m$ Z( l! [& S) o/ w( c) Q$ W
    11.6.3 ngx_http_core_access_phase  4097 _! Q5 J* A( d( @

    6 h. b& U3 Q/ f% ~, n11.6.4 ngx_http_core_content_phase  412$ S5 j2 K7 K1 c* O$ j) v) K/ L
    2 z5 G2 J" q, H; ~
    11.7 subrequest与post请求  415. [; J1 x: O7 Z0 h; E8 @

    3 G+ m- h- n! Z& {$ k# k: T* {- g: W11.8 处理HTTP包体  417
    / [0 j& b& I1 X1 i7 q3 ^" A0 N9 e; j- i# a0 V) U- q. B2 Z$ v" _
    11.8.1 接收包体  419" f( R6 ^$ _( n- q6 y/ P  z
    $ e: \9 \' [: |- I; O# V
    11.8.2 放弃接收包体 425, d' y" s2 K7 x( ^
    1 Q' e7 c2 c1 u: l! @7 M" e
    11.9 发送HTTP响应  429
    5 ^" h0 n& Y) U  i& }
    7 O3 W% w" c: i& e5 U% [11.9.1 ngx_http_send_header  430
      C3 f: ^- H- c% ^' `/ }
    + Y* \, g) x: r, S# |; }11.9.2 ngx_http_output_f?ilter  432& v. E6 r' F! E& V
    4 k. Y" J" T: v" G- `) x
    11.9.3 ngx_http_writer 435& ]+ v4 d9 Z4 e- G# M9 b  q! S
    1 T, y" ~4 U' f: s9 a5 G2 L
    11.10 结束HTTP请求  437
    7 {( t- f: o1 \
    - H- s5 h; E: ^* Z/ m/ F) m! j0 \11.10.1 ngx_http_close_connection  438( a3 b& ?# g1 K# N
    ! f: b: H1 W& m
    11.10.2 ngx_http_free_request  4390 ~. s5 W8 b5 P# v
    8 u1 H- K0 |& Q- k
    11.10.3 ngx_http_close_request  440
    7 Z! u) U0 m1 |* R2 E1 ~8 q. |4 m; T8 L. W9 d4 D
    11.10.4 ngx_http_f?inalize_connection  4419 _: }; i! F. n. F. ^) ?

    4 |) w* K# @7 h11.10.5 ngx_http_terminate_request  443
    5 Z  ^: e( p3 s' L0 ]6 I; @8 @) U% ?0 i3 H
    11.10.6 ngx_http_f?inalize_request  443
    - r  k0 i6 }% V  F2 G$ n
    ' ^/ c/ h0 `  k5 E3 r11.11 小结  446, n2 ?$ L  B2 M3 r: f

    8 L' S. `% _6 ^8 F: d第12章 upstream机制的设计与实现  447: y) `% t- f8 o3 m( F4 Q# D! f
    9 j  }4 u8 \' `) w: W
    12.1 upstream机制概述  448
    + b+ @0 {4 W$ |$ a# U3 Z1 n/ G0 R# _
    12.1.1 设计目的  448
    - P. b$ C, C# Z" E( u
    ( i# e5 Y9 J3 x12.1.2 ngx_http_upstream_t数据结构的意义  450$ i/ E6 l. u5 n

    + c* q) G( }, |3 x9 O: n$ S2 O1 m12.1.3 ngx_http_upstream_conf_t配置结构体  4530 g  l* [+ J3 i  W! ^

    . w7 P% G1 A' A" B4 J+ J12.2 启动upstream 455
    4 i) B! {; r- U& N3 D
    ( a" I+ ^+ n- ^- t& r6 h! I# t' q12.3 与上游服务器建立连接 457
    ) b( h, b' b0 r: S9 U# s* B9 i+ o- p4 P
    12.4 发送请求到上游服务器 460
    ' d3 E  o$ M' y. P4 r: B
    ) o: j& K) W. m) `5 y+ A7 t4 ~12.5 接收上游服务器的响应头部 4637 N& u) X3 y; q# Y

    ; \# i: \* K3 H5 K" J. T12.5.1 应用层协议的两段划分方式 4631 z6 {8 @: P' y

    % r  k+ d+ W" @: r  o12.5.2 处理包体的3种方式  464
    , R; H* U3 q# q5 V1 `, w" |2 d0 K& o7 n1 F/ c7 f. e
    12.5.3 接收响应头部的流程 465
    2 h* L* h) n' C- K- e- l% ?0 `+ g( M2 }& q
    12.6 不转发响应时的处理流程 469
    9 k9 t4 q4 X0 m: [1 k+ U/ j! [* `3 b
    12.6.1 input_f?ilter方法的设计  469
    9 v  ~. ~7 Q0 j: R- C: T
    & S$ K3 P7 A2 `4 a' E, C, H12.6.2 默认的input_f?ilter方法  470
    ! a+ Z% O5 J$ `
    9 Y0 f6 t* W# ]1 g1 |12.6.3 接收包体的流程 472
    ) K) r, ]+ X4 s7 C& X
    : a7 d: D4 n- j7 L12.7 以下游网速优先来转发响应 4734 y" z7 A2 p! |8 ?- }- {& W! ^. m8 y" m

    4 m4 |6 A2 d; f12.7.1 转发响应的包头 474+ y& D* b. f2 A  ?

    1 a: x4 t5 l' V+ o* v' i0 i+ a- x- t. F12.7.2 转发响应的包体 477
    / [# B. }  n0 u, b$ v- d' x7 r! s9 F; J* W, h
    12.8 以上游网速优先来转发响应 481
    . A0 ]! I, M9 K% l1 M8 _
    5 X# b; H) y, d9 Z  v12.8.1 ngx_event_pipe_t结构体的意义  481/ `2 @( Y  X8 s& ~+ s/ I

    ' P# A1 v0 F. _% g/ W12.8.2 转发响应的包头 4857 x5 Y' ~- F& ?/ n
    $ ?' w4 I: |& I
    12.8.3 转发响应的包体 4875 z4 d% W% }9 `" s* w
    1 S' R- F5 L4 }; D. G4 q
    12.8.4 ngx_event_pipe_read_upstream方法  489
    / e+ m# K1 q- u9 F3 S3 x+ k9 L& a' n# Z0 O  q; W( g) d" U
    12.8.5 ngx_event_pipe_write_to_downstream方法  494  o' A8 i: s2 n' ^6 x  t

    . j2 m9 Z' M" A: o& J4 D9 |- \. p: t' `12.9 结束upstream请求  496% s0 C8 m4 L, F; C# n5 ~& [1 D
    3 \9 d  ^  v5 b4 {5 v
    12.10 小结  499# P4 U4 Q4 K, Q

    + Y: p$ x& H5 ^! A+ T第13章 邮件代理模块  500
    ) ~5 W6 P  M" ?' i8 [0 H/ X2 n
    6 r& k( n  v6 ^2 h* f, n6 r1 B13.1 邮件代理服务器的功能 500( T6 j, x& M. H* x
    - h  C4 {: U3 {# n: `; f1 W
    13.2 邮件模块的处理框架 503$ R9 l; F' Q/ F: l% b5 D* S
    0 Y0 T! H" |# s/ @
    13.2.1 一个请求的8个独立处理阶段  503
    ! p& J4 l. o4 o/ l5 F6 Y4 A% {& q# C. @6 I0 z4 B% \
    13.2.2 邮件类模块的定义 504
    ! r4 n0 O3 s5 u9 ^8 D' Q: W' H
    % a9 _8 l( f( B7 r) |/ O; \13.2.3 邮件框架的初始化 506+ ^# ~* H$ {& B% t$ v8 ]+ v: o, [
    # B- ?9 K8 O6 f9 S
    13.3 初始化请求  506
    " u1 [8 r2 p* w' G$ Y% o0 X
    " v& M% t; f# \/ V! f13.3.1 描述邮件请求的ngx_mail_session_t结构体  506
    & _( r/ D8 g) Z  i
    " N/ Q, h8 g; \: f13.3.2 初始化邮件请求的流程 509. q& \  U4 L5 }* A* b

    7 H8 V+ z0 f6 c13.4 接收并解析客户端请求 509. m' ]2 N5 o9 t; S, e$ F& [' N

    ) k" s" T0 h, X& H' }* Y13.5 邮件认证  5105 A& g' _5 a( F" G3 j/ `$ b2 i8 y. q

    + ]* p6 I5 b4 C  r. y+ ^13.5.1 ngx_mail_auth_http_ctx_t结构体  510
    " ~4 ?$ e1 O; V- a) q% V' U' q% ~( x! b5 W3 x8 }: X3 B
    13.5.2 与认证服务器建立连接 511
    3 @. G1 d# }& q# ~) C5 L
    - X( r% ~! d7 K6 L$ _# B13.5.3 发送请求到认证服务器 513
      M: h  H' L9 D% y# Q# I* a, |( R' M: F+ M+ M  V
    13.5.4 接收并解析响应 5149 M0 j8 N5 S, }6 }! R$ S2 _
    & W, i) Y- w1 z; N- {( H
    13.6 与上游邮件服务器间的认证交互 514
    1 x% H& T( p/ b0 i* _- y1 M
    , O9 k7 e: ]/ {* ]: Q0 i0 o13.6.1 ngx_mail_proxy_ctx_t结构体  516
    ! X( [% G" {% e8 m7 t' `
    - A, t1 f4 \" W: G8 s0 d+ ~13.6.2 向上游邮件服务器发起连接 516
    - _" U  K: l) {+ F7 i: e3 o
    . h0 O" ^4 }: d- z13.6.3 与邮件服务器认证交互的过程 518
    - A0 B% `7 t8 l; K9 N. Y
    3 d9 }2 u( b% o* O$ `( t13.7 透传上游邮件服务器与客户端间的流 520
    ) p9 U5 X7 V5 r( c) B5 H  J
    6 f( ~+ P% X" }8 D0 e13.8 小结  524
    0 U( q1 c. V+ i( H- X1 M* ~7 U3 x. `/ X
    第14章 进程间的通信机制  5257 v5 C, o7 s, x
    ; Q2 I0 o) z- {& O
    14.1 概述  5259 p% P; n2 E% Z

    0 H2 A( U5 ^# V9 R14.2 共享内存  526: J6 _( O. P+ |7 L

    9 }7 g' T1 X7 ^  t14.3 原子操作  530
    ( D' P2 T4 H! Y- V/ `. @. b* R6 c  y, c
    14.3.1 不支持原子库下的原子操作 530
      [7 o! y; n" K2 c
    + C) G& e6 U: `3 B- B0 h14.3.2 x86架构下的原子操作  531, @* l- ?# j6 Z* \
    , M5 A6 F, e9 h7 V9 L! s& Z
    14.3.3 自旋锁  533
    % I& v0 b4 h% G" Y1 ?: L/ i) {) b
    14.4 Nginx频道  535( X2 F" k/ y( L; I0 y
    3 Q3 s9 I- ~0 S" q6 @& k  r7 u
    14.5 信号  538
    ! k' H5 W9 F7 v" D) F2 J/ w
    ) {7 S& H! g, I14.6 信号量  540! z' i3 o! l' H' K
    " u& O, p0 d& c8 L
    14.7 文件锁  5417 p0 ]* q* W; @% F( m

    - ]- [# K: |* X% H0 Y, {$ d14.8 互斥锁  544/ x5 y) W" Y( ]- Z9 D# G
    , ~: d% D5 k, ]+ @% s! T3 i. f
    14.8.1 文件锁实现的ngx_shmtx_t锁  546
    / D9 N2 B' ~( G0 x% `- I) ^5 O2 |5 z- {+ U2 L& _
    14.8.2 原子变量实现的ngx_shmtx_t锁  548
    ; C- C! f  W6 i. @2 @4 t
    : k5 L# c/ M4 |14.9 小结  553
    $ B8 q7 E. S5 m9 n% ~2 n9 z" t& c" Y& z- Q
    第15章 变量  554' p% `  R! v! j3 Y6 s- q
    2 {& Y% t  T. ~" Q
    15.1 使用内部变量开发模块 555
    3 ~$ X5 J( e7 {$ f9 r6 t0 J( n
    0 K! {' ?: ~& {. \3 Q# f9 P15.1.1 定义模块  556
    . [( A) ]# y; F) i+ y0 Q( O0 a# v1 }  V- d2 Y; i
    15.1.2 定义http模块加载方式  557! P% W. ~% |, |! `# W1 J% \

    ; G+ m3 `0 J- T5 ^' s15.1.3 解析配置中的变量 558; N) f' K1 ~$ S% y# O
    ( E! W9 l5 O% n  a" O% n8 g3 ^
    15.1.4 处理请求  560
    - A2 n7 P3 D* e" |
    . y. t; {- l6 X$ K  h7 b) s: g15.2 内部变量工作原理 561
    $ u0 E; S' X; D8 o$ Z) [# U4 P% L1 k9 h8 [  Z
    15.2.1 何时定义变量 561
    2 D! o6 R4 n$ y8 V% ~6 C
    5 |# m" B' i5 ~- w15.2.2 相关数据结构详述 564' q, Q/ X3 l! `8 k$ \

    1 g9 j! ~" r/ B: m/ R* c  P6 l4 g15.2.3 定义变量的方法 572
    & n6 y7 B. L1 F2 u) h* m1 E
    5 n7 P- l0 ~, k7 I& G15.2.4 使用变量的方法 572
    8 P! n2 b: l4 [0 y  c2 L6 J0 W2 f! z+ N: V- ?0 m
    15.2.5 如何解析变量 573
    & f1 g! _. L6 s1 Q, t0 h' ~8 @- M, @9 Y' P% o6 v
    15.3 定义内部变量  576/ b2 {% e# x3 V3 ^9 x

    , D9 Z& e& \, b  v- q15.4 外部变量与脚本引擎 5770 z8 G) o' p- P

    2 u+ B$ _4 m* B! C15.4.1 相关数据结构 578/ X3 T% Q* E" U. O* W2 Q

    ' }$ X: s/ t+ h) g4 t0 _* O9 u3 L15.4.2 编译“set”脚本  581& P( q" C! M, y$ W& b* F7 W! f
    ! H# s% X0 I2 |' s& @6 w) q
    15.4.3 脚本执行流程 586+ I% ?. i( E6 ~& Z. D
    ; }$ l/ Q' A" k
    15.5 小结  589
    & n# }9 Q& \9 P9 j* A, q4 j7 G
    2 z5 G- P6 d% C6 u  z第16章 slab共享内存  590
    2 @4 u* H9 C1 U$ T2 \/ F' @" D& L0 R/ h9 T
    16.1 操作slab共享内存的方法  590
    $ ^( ]( k0 e3 c9 P" q0 T2 `7 [7 ]' t% L. [( M
    16.2 使用slab共享内存池的例子  592, o; [2 ^0 R- s

    8 L) w' o7 T' w5 U3 G16.2.1 共享内存中的数据结构 593/ z) {; r2 N5 M% `+ e8 w

    $ V% X/ ?& q/ j( n* P5 \2 }16.2.2 操作共享内存中的红黑树与链表 595
    * I$ b2 n( w( ?) Z3 d: n/ D% \
    " J3 `4 Z& h( E4 s) q0 R16.2.3 解析配置文件 600  H% J. u2 V% m
    / L$ ?8 A1 t8 D# d8 g
    16.2.4 定义模块  603
    + m( q' ^& T* ?" T4 R( O$ f* ^  N3 z' ^( _% i
    16.3 slab内存管理的实现原理  605) y6 X+ m* O! y, h" w

    5 x) `; u! C- x3 t" A3 q+ N16.3.1 内存结构布局 607' }" d' c; Z" m
    * d4 P7 p! ?7 y* i
    16.3.2 分配内存流程 613( a5 ~# E" o8 m% K: O+ y* |
    3 ]9 C: w: M+ Y; F
    16.3.3 释放内存流程 617/ O, p) v" @9 L" l

    7 }4 ^0 M; H1 }, C& F16.3.4 如何使用位操作 6196 W1 J9 x. M- P) U1 T' i
    - ~- v8 U. z  g; P# t, m( X
    16.3.5 slab内存池间的管理  624
    , A5 }% |# [, e- d* n) x: j: u* I. `1 ^
    , ?9 ?: u: ?/ |! C- M+ ~, h/ {16.4 小结  624

    . V5 J) b) o' L2 F0 z: C1 H1 t% a
      l9 q. G" B9 {

    * o, @# p' _, `9 @8 l! c& V8 v' p! g# \0 g

    ( J: E( ~! o* {: Y$ U; }" W百度网盘下载地址链接(百度云):java自学网(javazx.com)深入理解Nginx:模块开发与架构解析(第2版) PDF 高清 电子书 百度云.zip【密码回帖可见】20200802更新  @' B' Z7 Y5 T
    游客,如果您要查看本帖隐藏内容请回复
    * _: m( A* i& d

    : s3 y8 T: F4 s& T: W
    回复

    使用道具 举报

  • 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) F( ?& T( k0 V. L; `9 k% m
    回复 支持 反对

    使用道具 举报

  • 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 12:15 , Processed in 0.175851 second(s), 38 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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