java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 37708|回复: 376

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

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

    [LV.Master]出神入化

    2039

    主题

    3697

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66471

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

    发表于 2016-8-1 14:13:22 | 显示全部楼层 |阅读模式
    java自学网(www.javazx.com)-java论坛,java电子书推荐:《深入理解Nginx:模块开发与架构解析(第2版)》
    : h" z4 |- R, P' Z+ i0 \1 }java电子书推荐理由:本书包括四大部分:第一部分针对初级读者,介绍Nginx关于获取编译运行的基本知识。第二部分针对中级读者,以一个例子为主线。第三部分针对高级读者,这是本书的重点,彻底解析Nginx架构。第四部分针对中高级读者,以Tengine的开源模块为例。! j8 W5 `3 F# T, z+ f

      c: A9 v% d- \( C+ W0 Z
    ' z+ M* U2 c0 P  y7 ]/ f8 y4 k
    作者:陶辉' P/ I# y  ?4 e* \  O' R
    出版社:机械工业出版社
    1 C5 N* F5 _: f+ z出版时间:2016年2月
    4 R) [) {: T1 s7 ^7 a% h: ~
    6 F1 m" b" n2 l( J+ _/ p

    4 @3 U2 i0 Z$ a7 O QQ截图20160801140226.png
    . Y, I' @1 v; O: d; c9 M) M( u
    , ~4 q. v9 {& U3 j7 t7 S) E9 J

    & i" N# v! N) X: n0 X' }3 pjava电子书目录:
    6 Y0 j* u* F1 Y- z! R) n
    5 a4 t* ?9 x0 V0 Q! P6 V! O
    1 w  o. D& M  e* h
    前 言8 }" d& _9 E& p- X/ G8 Z
    6 H: g0 @! I: q) q0 |
    第一部分 Nginx能帮我们做什么" A  p9 @$ L' V5 V: @( Q
    - S: G5 t: v) r. k$ B
    第1章 研究Nginx前的准备工作  28 B  \5 j) g: n4 |. F8 t

    - P0 N& Z! T5 H" T1 {1.1 Nginx是什么  27 f$ Y  m/ }& |1 C+ p% z
    , l* [# O0 i" u5 M
    1.2 为什么选择Nginx  54 w3 a* y3 @9 O" }

    , e" ~6 N2 u1 H1.3 准备工作  7
    # T) c3 g: P/ g; w8 n- _: ~
    * y+ w5 r- w; h) @. K( N1.3.1 Linux操作系统  79 ^: j4 A( n/ |" s/ a% \1 n

    4 U! c( X$ [+ @: F- p2 G  O4 t1.3.2 使用Nginx的必备软件  7
    5 h6 G0 j. D) B! l9 B0 v. Q
    ) o5 P: z% r4 Q6 F, F% H1.3.3 磁盘目录  8
    % l/ X: ^! c6 Z
    2 v7 T; r4 D0 U2 T1.3.4 Linux内核参数的优化  9
    $ R  D- ]5 ]8 i* c# o
    ) Y& l) c9 ]; y' d* \4 Z1.3.5 获取Nginx源码  10( ~3 v) v/ K+ B8 N3 z

    3 o  V0 m; C# L) G1.4 编译安装Nginx  11( D5 |0 V4 {. }; p" ~/ P
    ) m0 [8 E5 n# v& i
    1.5 conf?igure详解  11
    6 H; z0 h# L  [% V1 s9 {2 m
    $ Q& H( Q% U0 H% X6 ]. ]1.5.1 conf?igure的命令参数  118 E# A- j  Z6 z& j' B/ P

    5 b! ~+ T; e- g$ M9 h1.5.2 conf?igure执行流程  184 u/ ~* F- r7 T- i% [" q
    ' Z7 y! C; E. t1 F' i
    1.5.3 conf?igure生成的文件  21  F' U  v" j+ g/ S
    $ L8 g& z/ e# j
    1.6 Nginx的命令行控制  23& F  q9 [! p2 V: E$ \$ ?& W+ c
    4 }7 Z$ C4 W* _7 U3 Q1 {
    1.7 小结  27) h7 o, d' F4 q& m0 z# j
    - C3 e7 o8 X, [7 v1 m
    第2章 Nginx的配置  284 L/ J0 G5 z& u9 ?8 n* J, u
    " Y; M" I# N' g$ M7 x
    2.1 运行中的Nginx进程间的关系  28+ S: ]3 V: M! C+ q7 l. f
    " v: m+ y# E, Y! n, \
    2.2 Nginx配置的通用语法  31
    ) L8 a( v  P5 U: H, L" ]$ E* n9 `6 X& g! |
    2.2.1 块配置项  31
    . g$ n9 s& ?5 M8 K+ N
    / n: m$ e+ `7 U: o/ B# A/ F. B2.2.2 配置项的语法格式 32& R8 P9 l1 G4 b' }2 N; v2 x/ M

    . ~- U" {  K$ w% H4 ~( T4 J2.2.3 配置项的注释  33' o' l+ A9 V7 h
    1 j' n, @. p' j( q- r
    2.2.4 配置项的单位  33
    0 P! f5 D+ C1 t& r4 p( V% U/ q; k# r1 }$ h
    2.2.5 在配置中使用变量 33
    $ w/ X: b1 H9 P7 q, I& ~7 F' ]' N* i/ a, N! Z" D
    2.3 Nginx服务的基本配置  34  r$ s5 g! ^9 d! l

    - w% q! x2 @1 ?2.3.1 用于调试进程和定位问题的配置项 34
    5 i* y' `5 ]) K. U  o0 W4 x
    6 A6 O, R2 c% @2.3.2 正常运行的配置项 36: t' G; z* i* j' N# r$ N
    : ~6 s- `4 A, A- \
    2.3.3 优化性能的配置项 379 d- i* d# E- ?; o: f( j

    5 p; }" H0 C& a4 ^4 X3 L2.3.4 事件类配置项  39$ `; H$ a4 H: K

    ; l% v9 g# U  \% u  }2.4 用HTTP核心模块配置一个静态Web服务器  40- L+ d0 z$ ~* n: v" W$ a' q9 S

      E! Z5 I' k" q) Z  ?3 x' i2.4.1 虚拟主机与请求的分发 41
    ! N/ u, l# |+ ~- j% m2 P' U$ E1 Q$ V2 v. L
    2.4.2 文件路径的定义  45
      m/ A  i1 n; U8 y4 D2 r
    ( p' ]' c2 u1 t  B' O$ N+ E( t2.4.3 内存及磁盘资源的分配 47; ^. a# j, V* [

      g8 ~" `3 x) L) I; ^+ \2.4.4 网络连接的设置  49
    7 m  z; v% e3 g$ ]2 l7 Y# J- R8 \, W& {
    2.4.5 MIME类型的设置  52
    . ^! ^1 k/ @. N# ~" k; K  Y! y( |8 Y
    2.4.6 对客户端请求的限制 53
    * S: P! O3 m* I# E% `: }
    ) d: q( S+ O8 t/ c9 v3 o& w. a; D2.4.7 文件操作的优化  54* u/ W5 ]3 ?/ L  s% t
    # g# [: V8 D$ e$ w! }0 b
    2.4.8 对客户端请求的特殊处理 56
    4 x  X) }+ `( c6 u5 i" t. P& Q" M9 I( F8 L% U% |
    2.4.9 ngx_http_core_module模块提供的变量  57
    - [- h: k9 \, I8 `+ \! p4 w$ r2 |, Y" g4 b# H3 C! d" q
    2.5 用HTTP proxy module配置一个反向代理服务器  59
    4 k) ]! f  {7 X0 ]$ a' r3 e, r  J6 u! G6 V: f- e
    2.5.1 负载均衡的基本配置 612 R& S8 e+ l  f9 R

    : l( @% G# T7 t- `' f2.5.2 反向代理的基本配置 63
    2 o& x+ P0 r3 T; @+ [# n/ E* `- r& M- E
    2.6 小结  66
    2 h0 r( o. s  q( ~; c' _
    6 J; J# R* d2 G( {9 }3 w第二部分 如何编写HTTP模块
    ' k' P% f+ m8 G2 r; Q1 u5 s( \. ?0 j+ B9 a# B
    第3章 开发一个简单的HTTP模块  68+ J* r( G: {1 m/ K, h0 W
    5 t/ U) V2 j: s& R# Y
    3.1 如何调用HTTP模块  68
    " I9 x9 O7 e$ S1 v- t$ V( h, ^+ U; ?! K1 O8 J  R& S
    3.2 准备工作  701 A4 @) M% T9 A% s  t! }8 H
    / ^( i2 c( Z8 B0 g$ p( A
    3.2.1 整型的封装  71+ j$ U/ N, x0 p$ n  e6 x( @

    5 f  U) b9 M4 Z9 w3.2.2 ngx_str_t数据结构  717 I; E- ?! n* J2 l% d7 P
    1 ?4 c! j: |( E+ y( b
    3.2.3 ngx_list_t数据结构  71
    1 M2 |( S. Y; H; n/ o
    8 z, C8 b5 e, c" [# I% v7 x3.2.4 ngx_table_elt_t数据结构  75
    , P/ m  |- o, Q* K, C6 c7 g) ?' t0 c( k6 u  q
    3.2.5 ngx_buf_t数据结构  75
    , m6 F7 L) r: A( l2 @) m* F6 H. {+ \/ W/ C2 P
    3.2.6 ngx_chain_t数据结构  774 T& x; T: F: o
    # {, S: c8 {& j0 m% ^
    3.3 如何将自己的HTTP模块编译进Nginx  77
    1 d; c# z- B) R5 g6 G
    5 g. g" b) z8 i3.3.1 conf?ig文件的写法  779 _" e% D4 P0 C3 }) X! w
    " [$ `* K$ c8 }1 ], O4 X8 w
    3.3.2 利用conf?igure脚本将定制的模块加入到Nginx中  78
    2 Z3 J' j+ |2 d7 b! B: c$ f9 b9 I" e5 S; `* Q6 Y" q2 n
    3.3.3 直接修改Makef?ile文件  81
      r/ O7 J$ z2 [8 n3 k; L: K7 T( z# V; ]% G
    3.4 HTTP模块的数据结构  82+ Q0 s0 c/ g* }4 s2 I

    $ y7 G" N& s$ R  I# ~3.5 定义自己的HTTP模块  86: D/ X8 O( f& i6 a6 z

    ; E( ?# M! |% X/ z3 F. d# h3.6 处理用户请求  89
    ( {1 W) D" x4 M- ?# ?; O
      |; G% ~: i9 ~4 }) l# o% U) I3.6.1 处理方法的返回值 89$ y. n$ @, E* Q% c3 _* H( p5 v2 w. l

    0 T8 |& @; `  O* u3.6.2 获取URI和参数  92. Q5 j) x! P* s8 f9 S1 w$ g4 L
    / `; K. l! G" {9 V+ W# e6 l. Z& X
    3.6.3 获取HTTP头部  94
    0 t, s" ^7 H6 s4 o$ u
    0 F1 a: t5 j+ H' a3.6.4 获取HTTP包体  97
    % y  |# g+ B) @1 A% P& o/ w6 c7 C( y' k  I  x: q/ q
    3.7 发送响应  991 p6 A; O0 g- x% q$ A

    ( V2 D4 O. V, n3.7.1 发送HTTP头部  99
    & s# \8 N$ Z; e& U$ b/ |9 h% j
    ! y6 s3 Y  k- Y8 M3.7.2 将内存中的字符串作为包体发送 1017 V  `) v0 G) a8 z

    - X* X! I" X: B1 y9 D) l3.7.3 经典的“Hello World”示例  1026 J* e2 }, ^# V$ F7 g  K

    + M% B+ r  |' o, f9 @3.8 将磁盘文件作为包体发送 103
    , k+ [9 c3 H, C* W" f
    ( C' h( B1 H8 y: ~3.8.1 如何发送磁盘中的文件 104
    9 h! Z! f$ I  [/ L
    0 s: I- `7 \/ B8 _3.8.2 清理文件句柄  1067 }" Y8 g+ q% |6 E4 I+ T
    - z2 u% |) n& ]) ]' G- \
    3.8.3 支持用户多线程下载和断点续传 107
    2 U: a  t2 \8 C9 w  b; g/ @: l% H: N( @, `
    3.9 用C 语言编写HTTP模块  108& `( D- R- \- m5 G

    / P. q' V% Z* X0 h3.9.1 编译方式的修改  108
    & G1 d9 \; S4 b
    , w0 P7 h4 F! ]% K) d! f7 G3.9.2 程序中的符号转换 109. X1 {! R' g  K! d% r
    : }. m- s! v4 y$ ~, Q- m2 Y5 ?5 y
    3.10 小结  110
      p: s$ I/ v2 }: L2 I6 o$ `( I+ ^( `" w/ V( B
    第4章 配置、error日志和请求上下文  111
    ( ?: @$ F1 d- L$ u
    # ~# y8 _3 n( m5 o  b7 m1 _% j5 }" [4.1 http配置项的使用场景  111, C  E2 e6 W) G8 V& m  J; W: ~4 [

    9 v* C, k! ^9 H8 a5 N7 U4.2 怎样使用http配置  1131 x) M" W9 K) a9 c+ b% O# |

    3 M. L9 C# j  x! L8 |: p4.2.1 分配用于保存配置参数的数据结构 113% v/ J) V7 z7 s) C. ?. K* M7 f

    5 K/ k8 f* n; A- S* r7 K0 ~% @/ E' X4.2.2 设定配置项的解析方式 115
    7 f2 T5 c' _% k5 M3 K. w, ?0 Z$ G" g% M9 ^, q. S( {/ x6 q
    4.2.3 使用14种预设方法解析配置项  1212 g" E2 \( d& @1 G% z

    8 w* v3 c) o  B9 ?* Q4.2.4 自定义配置项处理方法 131
    : l( C9 T1 Q* s8 p% ?0 {1 e5 @) Z  g
    4.2.5 合并配置项  133" C& a8 K' y) P8 G) n9 q! o5 G% e
    & |0 h, I8 I* W
    4.3 HTTP配置模型  135% ~& {1 I- n$ l; Q
    $ j, ]: [8 h4 B2 g8 }* Z
    4.3.1 解析HTTP配置的流程  136( Y3 R3 }. c6 V2 h& c1 e7 E* q

    : q8 ?5 N4 e! Q3 @$ A. W; M  Z7 j4.3.2 HTTP配置模型的内存布局  139/ N% H/ K3 E0 E0 N

    - M6 w5 y) U" Y9 O. q/ V5 G0 c4.3.3 如何合并配置项 142/ }3 J) V" x) ]+ Z; j

    $ L6 Z( ^7 R4 r4.3.4 预设配置项处理方法的工作原理 144
    - b" J* @# H" a( r! o9 m' \1 w2 l0 E: Y8 O. q
    4.4 error日志的用法  145
    . w6 E: I, N" ]* n# G6 t2 e8 o) @
    : S* [- \. |5 l. ~2 [4.5 请求的上下文  149
    * S. B+ J+ j0 @# w# `9 p" G
    4 R* H& F# a5 s6 _! ?5 _6 w4.5.1 上下文与全异步Web服务器的关系  149
    : \4 k) g& M! R" T8 Y: @  l: s2 F: D9 I/ A: R, U' H
    4.5.2 如何使用HTTP上下文  151
    0 U, l5 k( a" C- N+ G
    $ X# A% D, c2 A4.5.3 HTTP框架如何维护上下文结构  152
    & e/ }0 {/ ^  c$ V# b! x, k5 l' s+ ~
    4.6 小结  153* [: z+ i/ j. f! C9 i3 Q9 \( r1 w

    # ?% V0 p4 |# ?# R- u第5章 访问第三方服务  154
    & a5 J5 ~, {6 i. }2 Y0 [. Z$ s# g3 Q+ c% o$ L" U
    5.1 upstream的使用方式  155
    5 j8 M6 ]+ E# h0 p
    / j* v! J# J7 k* ]5.1.1 ngx_http_upstream_t结构体  158: i- D" i  q& E7 g9 R7 o
    % |( l) B) N! R( e8 j% B% {
    5.1.2 设置upstream的限制性参数  159
      l. f! @" X% i
    ! `0 y, U2 i8 B8 E0 ]/ C5.1.3 设置需要访问的第三方服务器地址 160
      \4 b( L4 n. `
    # _& g1 W+ t1 H( G' i1 x- Z5.1.4 设置回调方法  161
    3 @8 S, ^6 W( J. ]; h1 J+ G6 g
    4 f6 V& r7 s! ^" W! g, A* x5.1.5 如何启动upstream机制  161
    / O' b5 J2 Z$ ]( ^; O6 |% g& w! x/ D& E
    5.2 回调方法的执行场景 162
    + \( C5 R" E/ K% R/ M, e4 v+ ?: ?1 ~, G* m( H2 }/ K* `
    5.2.1 create_request回调方法  162
    9 {/ q7 t, K% f/ r6 E
    " N3 ?1 x- q, r+ Z& D4 O$ m& p5.2.2 reinit_request回调方法  164
    9 b2 U4 O0 j/ N5 n; x+ n/ |( w5 _
    # h1 }- L3 b# _  Z5.2.3 f?inalize_request回调方法  165
    3 o7 U. Y2 k7 d6 _  ?# |& @1 N& o" D# v
    3 W- h1 e9 i5 u: D% M5.2.4 process_header回调方法  165+ K0 T6 S" p% T9 g, [5 V' `
    3 m, L! Y2 o1 S
    5.2.5 rewrite_redirect回调方法  167# Q7 H( b! n& z

    % N) m& F/ \7 U/ }+ u5.2.6 input_f?ilter_init与input_f?ilter回调方法  167
    " A, W% E6 m: |" U- Y# o+ e
    " \  ~& c; O8 |* I* J* C5.3 使用upstream的示例  168
    " P0 ]' h3 V/ X3 d- }- Z% B2 l2 t6 I1 g% A. \, P8 f7 ~
    5.3.1 upstream的各种配置参数  168% z  |* A) u  T% d1 ]8 c

    ; W, q; m% C/ ^; K: C& _! x5.3.2 请求上下文  170
    . g. a* J, G& Z' J/ J/ P: F. u
    & l8 M. g1 U1 ~/ {+ }5.3.3 在create_request方法中构造请求  170; c6 A! B& A9 _- O8 i8 X/ o, C

    . E& U: ]5 p5 }4 K* }5.3.4 在process_header方法中解析包头  171
    # l+ j4 Y6 \0 n( t( ^1 J
    4 N5 X. A; }( ^0 p" i3 r% N, ]5.3.5 在f?inalize_request方法中释放资源  1759 P, I( z; d* s' t9 [+ x
    , Z/ @6 b3 e! S; x0 k% w
    5.3.6 在ngx_http_mytest_handler方法中启动upstream  175/ a& Q" d; H7 J/ i1 c  n9 [; L9 [

    2 j6 H. S6 Q5 A: ]/ I+ W: |5.4 subrequest的使用方式  177
    " N  N6 ^* f' z1 s7 r( E% z* G8 f5 s5 X# \7 \: u( {6 Q
    5.4.1 配置子请求的处理方式 177
    . g' ?" y7 V! a6 i5 V
    $ m/ V* O( ], H5.4.2 实现子请求处理完毕时的回调方法 178
    & A- k9 s! ]7 h0 a( w9 F5 v1 A( n+ L) S$ H8 v' _
    5.4.3 处理父请求被重新激活后的回调方法 1792 ]! w* x2 H4 n% P9 @' ~. c  \
    5 x! _2 c  N# U" b* R' j
    5.4.4 启动subrequest子请求  179
    6 e3 u3 n/ E- }' n  v3 L7 w7 O, T
    0 D& A$ q( i5 f2 [0 s5.5 subrequest执行过程中的主要场景  1807 p7 j! D% v$ H

    ' V2 z9 d1 H( R7 P: a5.5.1 如何启动subrequest 180
    5 s& M* x# b8 F2 L* Y8 T( j1 h+ a9 G! r. w1 t% X
    5.5.2 如何转发多个子请求的响应包体 182
    ( Z6 Q" B- p' k% T" ^. [6 [5 S1 m% x. F/ o. W* c6 K" S" q0 O
    5.5.3 子请求如何激活父请求 1854 L6 B0 g0 V7 @8 a9 r1 B8 t8 _. F
    6 q  g8 t7 k  E& I" r1 e% w* p) U
    5.6 subrequest使用的例子  1870 x) w) U' p3 j* c% L% _' r

    2 L4 |3 G0 F' V8 |- m5.6.1 配置文件中子请求的设置 187
    9 k: w, q% P  W. U
    : E7 w) y2 y0 d* u5.6.2 请求上下文  188. h5 e; V7 X( p; {1 Y
    1 h. u5 q3 y9 e# _
    5.6.3 子请求结束时的处理方法 1880 e4 d: H. {% w! O1 q) v9 a% y

    " C  c* ?! s$ h; v( [! u6 |5.6.4 父请求的回调方法 189
    6 Y) ^1 P; v1 b
    4 K; F: _& n4 e6 r4 v# A  B' t5.6.5 启动subrequest 190) P( F# f( ]+ `4 p
    4 S- _( t$ \1 P( L( S3 \( ]. ^
    5.7 小结  191
    + G- {# H! F8 M) Y1 n. r  c$ ]: D1 w1 k1 Z4 o5 W8 X5 m* a
    第6章 开发一个简单的HTTP过滤模块  1921 W4 x" E0 S# Z* l, `
    0 n& R3 i6 o4 n
    6.1 过滤模块的意义  192+ g* o- X9 M! U- q5 j3 e
    ! k. m0 s5 N% ~) p. z2 b, j2 l
    6.2 过滤模块的调用顺序 193
    / E2 K- \& E& a- M9 w
    $ i  U' [$ k+ A  ?0 q7 H* p6.2.1 过滤链表是如何构成的 194
    : M! z# e% ~1 W! i- E# r, Y0 i
    # ?: p. H6 [' ^5 H; [6.2.2 过滤链表的顺序 196( U& M2 G; s9 V& u$ J+ C

    , [+ v) K: j' ]* j2 U6 T6.2.3 官方默认HTTP过滤模块的功能简介  197- z/ ?* O* \, h$ h, K7 Q

    ! _5 y' ?# L; ^+ z6.3 HTTP过滤模块的开发步骤  198
    " U4 q' _) e# X9 K3 z7 z
    6 ]1 X# ^- q, o: M) M- I& o6.4 HTTP过滤模块的简单例子  200
    ' ]8 M; U" Q8 t% X. c" m
    5 R2 L' r6 \- g- B5 B6.4.1 如何编写conf?ig文件  201/ S1 \0 U9 U& A3 _, r  j
    ) b, ~! E) v: _, U# g- C
    6.4.2 配置项和上下文 201, l) V4 y- y) s& K
    ' m0 T* k. v) g% e9 U  j
    6.4.3 定义HTTP过滤模块  203
    + Y' ~) c4 V8 I$ S$ A6 U. q( ]1 j2 g: y
    6.4.4 初始化HTTP过滤模块  204
    / d) K: @" ?2 W9 S$ s/ W
    ' z8 A' G: c3 w8 \2 q8 a6.4.5 处理请求中的HTTP头部  204: Z3 M0 I! a2 o7 c7 v1 _% g

    " d& n1 y7 A; k; y6.4.6 处理请求中的HTTP包体  206; I$ ^) j1 c8 h/ j

    ( r, @) t6 @  x% k2 u) [3 }; s6.5 小结  206
    ) I! R8 b, h3 Q8 r; e! U/ t* F
    * g* H0 O$ j* e4 ?第7章 Nginx提供的高级数据结构  207
    4 y9 X; O  R* `$ a6 r7 |- G  J: V8 k0 m( {' m) f
    7.1 Nginx提供的高级数据结构概述  207
    7 O8 Q5 H1 X' R  H% X% B6 J; K+ ^& j. Y* F3 N3 }# b
    7.2 ngx_queue_t双向链表  209& e# E. g! j4 _1 E; Y" n
    & L7 G  N! d0 z+ v
    7.2.1 为什么设计ngx_queue_t双向链表  2095 S  x( {$ }+ A' ^

    6 n6 a5 a/ R1 `: F/ p' I7.2.2 双向链表的使用方法 209# h# u; f/ y( g

    ' y; W4 ?4 k/ l. T0 ~3 j; U- y1 Q7.2.3 使用双向链表排序的例子 212
    & w2 M7 t9 @5 M" y- b+ t; x/ N+ q3 E7 Y1 ~. R# X3 W9 w4 ?8 \) u
    7.2.4 双向链表是如何实现的 213
    5 ~3 [- O  ^0 _" P0 Y
    & p  @* c, X1 m- f& X' z/ z$ q- ~7.3 ngx_array_t动态数组  215
    , |2 O* O2 n( `7 Z; e# g' |
    6 B8 o: B; u& R$ c$ u7.3.1 为什么设计ngx_array_t动态数组  2155 A+ }: a7 p9 b4 S- B8 y

    $ w; J' ?8 M; S; k( T7.3.2 动态数组的使用方法 2156 P! Z5 Q, y. b( i) e
    5 p, C6 J  s7 A6 H
    7.3.3  使用动态数组的例子 217/ y8 a8 b4 G* |" }9 U3 a0 j

    / |2 m, G0 ]( ~5 }6 i- y$ T7.3.4 动态数组的扩容方式 218* Z9 V7 @, i1 a* g9 \
    4 D, ^+ W9 _4 |% j! y
    7.4 ngx_list_t单向链表  219
    8 [3 w5 ?5 M( @& i0 {% E" G- Z+ E- q& B. r- N
    7.5 ngx_rbtree_t红黑树  219
    & v7 g+ I* k  L" ?
    8 h. @6 D/ \- {+ K/ S! n7.5.1 为什么设计ngx_rbtree_t红黑树  219/ c$ H6 \$ i& q$ q
      J$ s' e. y; A6 k! X; k9 Z  I
    7.5.2 红黑树的特性  220% L6 e) R- ~8 r. H

    - h( Q* K; X0 m/ W/ a) V4 P* E7.5.3 红黑树的使用方法 222
    0 m# q% v& H2 E9 J2 m
    ' S- i  M8 {1 ?3 \7.5.4 使用红黑树的简单例子 225
    8 C& S0 ?1 c  I% B; a& R! u3 x- L$ d6 V1 z
    7.5.5 如何自定义添加成员方法 2269 @4 J7 c6 o# t/ u) ~/ ]' J" z2 T
    & x+ A+ @% l) G' P+ N5 ^: m; h: d: R4 X: @
    7.6 ngx_radix_tree_t基数树  228
    $ [: C# t0 v7 G. i) B- Z+ i* q; d( P
    7.6.1 ngx_radix_tree_t基数树的原理  228
    9 g( \6 o/ ^! k) `
    ' q5 v" L  v* i) e( U7.6.2 基数树的使用方法 230
    % s* P) f. @4 ~) H5 I5 \
    6 G2 z# O# B6 J+ I. R6 i/ l" {7.6.3 使用基数树的例子 231" R  e9 O* h# I2 X  ?. H5 Q

    6 M; `5 ?% x& b" |/ n3 p7.7 支持通配符的散列表 232
    % Y8 `* G2 G. ~0 F6 `0 Z2 u& u# g3 ~  J  d3 l' ]# L
    7.7.1 ngx_hash_t基本散列表  232; u- M! r2 {7 Y
    5 K) Z( O" D. v/ U8 p( m& s5 k
    7.7.2 支持通配符的散列表 235
    1 m+ D$ a, y/ _
    5 _6 c7 s. D, P2 d2 h3 ?2 m+ Y7.7.3 带通配符散列表的使用例子 241$ v1 f7 F$ T2 b" Q" J2 ]2 W8 w
    ( E9 \7 w, j3 B' s& E) Q
    7.8 小结  245
    ; {; P" I) l( {4 m) p" @
    $ g6 p7 y" p- i# B9 R2 u第三部分 深入Nginx* `) d+ ^5 E" h6 r& K9 J% l8 q4 A! U3 \
    " {& W* U6 ~- ?6 I
    第8章 Nginx基础架构  248
    ( {2 w/ a6 t# O' }7 g, S7 ?3 v8 k3 E% M3 z8 W. p
    8.1 Web服务器设计中的关键约束  249
    5 |. `" j+ i2 F- Z# u$ l* P. o( N" R# W6 E) k4 T  A7 V
    8.2 Nginx的架构设计  251" v# M# s1 T' b3 N

    : ^2 t6 P! P. i8 i( j, T6 Q2 ]8.2.1 优秀的模块化设计 2512 j6 G2 k) Q. a7 ~3 a
      d; q6 S5 r5 M8 \* q8 t5 V
    8.2.2 事件驱动架构  254
    ( V+ E) Y- O! g9 u; s2 f4 F/ c. x
    8.2.3 请求的多阶段异步处理 256' I9 a9 A# w& B1 x

    $ G3 H2 E& B) [/ y; }$ B! O8.2.4 管理进程、多工作进程设计 259
    ) m* n4 s( [' N! u4 R& G# V0 x' \/ U3 _2 T; j4 y) X5 p
    8.2.5 平台无关的代码实现 259
    & n: D! F+ k. r9 e9 @7 C
    9 h% \5 M' M5 @- [! Z! P) l% K8.2.6 内存池的设计  259
    3 |  {" _  a1 D
    - r7 w1 v- L* o2 [8.2.7 使用统一管道过滤器模式的HTTP过滤模块  260- [0 |" ?. B+ n" v

    " a1 B) {. j2 @6 z# N8.2.8 其他一些用户模块 260
    $ u# J( e" I  B! w$ X: x' B
    8 c4 l! a& Q: _% v8.3 Nginx框架中的核心结构体ngx_cycle_t  260
    ; I5 ]" y3 O$ s) E2 X3 d7 \
    , N" G& d8 e% h! D8.3.1 ngx_listening_t结构体  261
    ; I, {5 W0 s+ ?0 {0 ?- p
    $ ]; G- \; a% N) ~9 w8.3.2 ngx_cycle_t结构体  262* S/ Z0 v+ J: \0 z
    3 ?, y1 x/ x6 `- v4 I
    8.3.3 ngx_cycle_t支持的方法  264
    ; ]8 r; `9 t: y
    ' |  s& ^* X; ~. a- D8.4 Nginx启动时框架的处理流程  266
    " O0 \! i/ w, A  }: }# }: v  J# Q! i" a) d' S( o
    8.5 worker进程是如何工作的  269
    ' G5 F  N. n* f( h7 T$ K
    , i# K+ N) ~# \9 L1 c% e1 {8.6 master进程是如何工作的  271! Z2 k8 T6 G& q8 n( Z
    $ }! Y6 o+ E1 h3 w, E3 `
    8.7 ngx_pool_t内存池  276
    8 @6 m+ L9 i8 a4 v" s1 i+ l# `" w) r7 `1 p: ^$ f3 F* r; n" ~# ?
    8.8 小结  284
    7 Q7 r* i; \5 O' g1 S1 z& ~
    " S- G. o/ p  g( [% j第9章 事件模块  285
    : h- M0 M! n' _7 R8 [; M( B3 Z3 Q$ p8 |+ ]
    9.1 事件处理框架概述  2869 F1 Z! s: N1 Y8 @! u% ^

    4 F" S; E7 M7 C3 M9.2 Nginx事件的定义  288
    ; M/ T- a( K/ f- d8 m$ e6 `, q; W* |6 ?( S( g
    9.3 Nginx连接的定义  291- Q$ p. Q" ~% ^: L' c+ g7 {9 x

    - y& T3 I6 p4 C" Q+ ]3 Q9.3.1 被动连接  292) [3 G% A8 Z, v+ j: o  |

      q7 {6 x" u7 r4 C9.3.2 主动连接  2953 N: M* n2 T. x  x" H- e
    * e1 |4 K/ c* p
    9.3.3 ngx_connection_t连接池  296
    8 D& w- a9 V( o7 R8 [, ^  a. u+ g9 }
    * r) B9 M/ ]" f  Q: `/ M+ x2 T9.4 ngx_events_module核心模块  297
    ; y( n. ?; r, K0 D3 F. u- D# ]5 U! `9 g" h, s, w+ F
    9.4.1 如何管理所有事件模块的配置项 2999 Y  s. L* Z* A& p) [
    " _' B4 `) c( |/ l
    9.4.2 管理事件模块  300
    " v' }* t  b' W- k/ f  R+ b7 s/ \9 \
    9.5 ngx_event_core_module事件模块  302
    6 J, @) ?$ h3 E/ s( n7 X& I! U7 n5 w8 R6 p+ |
    9.6 epoll事件驱动模块  3081 t$ v  ~7 ?7 U" M5 ]
    0 U  o& U/ F. ]9 W/ ~, l
    9.6.1 epoll的原理和用法  308
    + v3 X% z! T- H
    6 \4 y1 v5 f! ~3 b/ K7 N- [1 x5 e9.6.2 如何使用epoll 310
    & I! w/ Z0 d6 C3 N# D1 r: [1 C# T4 t# T
    4 h4 V1 Y0 j' ~, B) Z, V* r9.6.3 ngx_epoll_module模块的实现  312
    5 c5 [4 u- f2 {
    3 w) c9 O4 N. Y  |7 h5 x; A3 Q6 ~% O9.7 定时器事件  3201 B& ^1 w% q1 Y! r  d
    * W1 u( d7 t1 t+ m1 \4 S- i
    9.7.1 缓存时间的管理 320! g- ~% R: ^7 k- M# a
    ' g& T$ t5 Z, e5 r6 k( T
    9.7.2 缓存时间的精度 323$ Y) E! @& [6 Y9 w0 n8 d8 v' S

      S( {1 ]' O6 Z* J& j; b9.7.3 定时器的实现  323
    # L) P. }  K4 |% [$ ]' J6 Q& {$ {
    9.8 事件驱动框架的处理流程 324
    9 Z3 o* o2 w8 Y$ y' b& \! H
    7 G" `8 D$ M" y2 q( u9.8.1 如何建立新连接 3254 b8 L7 B2 M. ?6 }6 J7 t$ @
    $ X8 P# n) O; L' ~/ b
    9.8.2 如何解决“惊群”问题 327
    2 G2 z3 @0 `( S# Z* n6 g! _' F% }
    ! w) r0 d1 d4 r$ d9.8.3 如何实现负载均衡 329
    7 d( U8 T- w' p+ _$ M4 N9 y3 i9 P, a/ \/ }1 [- Z" T- L  y  v  ?
    9.8.4 post事件队列  3307 z; H" d5 W) v# _' s1 b

    8 n" ]" H" Y: n$ w' P9 z9.8.5 ngx_process_events_and_timers流程  331
    . z! L# g4 }4 ?' E- R# ?- m5 O' ]! W, {$ o# o- }
    9.9 文件的异步I/O  334% ~5 h* }1 h, X+ p+ }& v0 t6 m
    3 H. r( s! L( S4 C& G7 Y
    9.9.1 Linux内核提供的文件异步I/O  3357 \- o: x8 `  [9 D" h4 J
    % L$ \6 ^* G1 w6 C) e" _
    9.9.2 ngx_epoll_module模块中实现的针对文件的异步I/O  337  ]1 v0 w9 a! ~' e2 F

    3 ]3 A' x& C0 R9.10 TCP协议与Nginx  342
    ) C0 ]7 |) X" z
    , M- V" W8 a; Z, _; L9 M4 Y9.11 小结  3475 G, y5 ?( W1 A  w* J/ M

    ) d7 y4 Q/ a' v/ T: R" d) U第10章 HTTP框架的初始化  348/ K1 Y- \$ a! h; ]9 J
    3 [4 r  f, o+ o7 B; M4 z2 Y
    10.1 HTTP框架概述  349
    ; ~& N7 v* h- B
    * v. c9 b# i2 n7 _" z6 o10.2 管理HTTP模块的配置项  352
    5 _2 Y) z5 f+ R- d. p7 ~2 {5 x) u- Y5 r  Y( L1 k
    10.2.1 管理main级别下的配置项  353
    9 Z9 ^8 T' u! i. s: P( M& V# v& Z2 [4 @- N' ]! D; l+ W/ ?0 |2 O
    10.2.2 管理server级别下的配置项  355
    0 W. A$ ]9 K5 H
    * [6 o. O, _7 t! w4 u10.2.3 管理location级别下的配置项  358( x$ ~+ Y# ^% k

    ( F7 p" P. Z- l! f10.2.4 不同级别配置项的合并 364( Z3 H$ z4 s" {8 P# F) E( [. P
    ' E& J  L7 r. z" s
    10.3 监听端口的管理  367
    + h& h4 q& {8 D0 _% j4 v2 \& J( t: B/ _, i+ ]: J1 w9 [
    10.4 server的快速检索  370
    ) u8 W- X  G! y6 d8 t& A) f4 I; T% l8 M$ R& V  |9 t8 y& c
    10.5 location的快速检索  370
    9 D5 }" V5 L/ M+ G  \7 Z
    $ ]  i1 q; g/ w9 M: o0 ]2 l8 _; l  `3 F- v10.6 HTTP请求的11个处理阶段  372' a; M* D' A; n( U  z) Z9 C  s$ C
    3 m7 @. A( Z3 J0 f4 I& S
    10.6.1 HTTP处理阶段的普适规则  374
    2 M0 Y9 @' }7 p& \8 r# u/ Y
    * A! p: R# _, X; W10.6.2 NGX_HTTP_POST_READ_PHASE阶段  3754 M: z4 |8 E: I- ]& R
    2 ~6 ]- J0 @1 [2 \0 k  m
    10.6.3 NGX_HTTP_SERVER_REWRITE_PHASE阶段  378
    " a' m- U$ T  B% t9 j4 O( G9 p) `5 |2 f3 X6 O
    10.6.4 NGX_HTTP_FIND_CONFIG_PHASE阶段  3788 J1 w- e! W( L5 X# M0 D- O

    2 `& w6 O; X4 X' P0 Q8 e0 W3 B10.6.5 NGX_HTTP_REWRITE_PHASE阶段  3786 b  ~- v( r& V8 Z

    7 P! d/ `. X: ?7 m10.6.6 NGX_HTTP_POST_REWRITE_PHASE阶段  379
      k4 P9 s$ o- i: Z. q# T5 y1 c; S4 d% p3 u/ x' O9 Z$ _7 B
    10.6.7 NGX_HTTP_PREACCESS_PHASE阶段  379
    ' v5 W! F" T2 i; x" V% p5 Y' q: V& {# ~! t6 q  s$ V2 F; Y
    10.6.8 NGX_HTTP_ACCESS_PHASE阶段  379& l0 \/ y) [. Z3 B  j1 F* V
    # [% g6 C" F3 L: P# n" P" {8 l
    10.6.9 NGX_HTTP_POST_ACCESS_PHASE阶段  380
    $ x( ~0 i/ l9 t# b* V5 z7 G! k
    2 ]+ ?7 [- D% n/ @8 \9 t10.6.10 NGX_HTTP_TRY_FILES_PHASE阶段  3800 q0 c! W" z. ?6 `- Y
    $ i1 x/ j6 N# t  T# d3 W
    10.6.11 NGX_HTTP_CONTENT_PHASE阶段  380
    1 j- {1 i2 N% _9 N# o/ a" p% l
    " U0 b4 {# o* G) d) ~$ b10.6.12 NGX_HTTP_LOG_PHASE阶段  3824 @  T% Z) G! X/ v

    * z! x5 P9 V7 F9 y1 T2 R6 \. p) G10.7 HTTP框架的初始化流程  382
    3 F- A; p/ |2 y6 V0 @& |4 R2 Q% r0 y; A
    4 [; r! }, W. a+ S% G  c10.8 小结  3849 ]8 z6 q& i1 t+ @0 K0 A

    ; g0 o& b% |* z. ?" b# u  z第11章 HTTP框架的执行流程  3854 d, \# u+ J2 J% c. K: d/ Y9 M/ f
    # }" D! [3 D! b' G
    11.1 HTTP框架执行流程概述  3866 k3 \1 M8 k" W- ^) l# E

      a( @( w( t+ \+ r- s' K7 o, g; j11.2 新连接建立时的行为 387
    - @* f7 a. f. ]# c) y+ b& G* i% b4 t) W4 Q
    & m" J8 H0 Y3 H11.3 第一次可读事件的处理 388
    % T1 @8 N4 F+ C. {: D7 |) V3 F, u* J+ Z# I2 Z! T
    11.4 接收HTTP请求行  3943 x& F2 g  I6 y$ q
    ) j8 h+ V. w# i- Z  M- W/ Q  D9 m6 \
    11.5 接收HTTP头部  398( k. l7 b  z. w) f' [) O
    5 U% q6 f4 |' Q) z  r
    11.6 处理HTTP请求  4003 j# @' O3 n! R4 |2 S  ]

    % `! T8 M; R$ H0 d, f11.6.1 ngx_http_core_generic_phase  406( K: p, M: b# V! Z$ [( T- k

    7 O1 L$ i4 d) H' m& ^6 N& B' `11.6.2 ngx_http_core_rewrite_phase  408
    ) ~6 y! H! n- |9 M2 k
    " Z- C% B& s. W9 I11.6.3 ngx_http_core_access_phase  409/ }, D7 [" Q0 \* k% l

    0 F- A0 e7 r* J$ T5 M' u11.6.4 ngx_http_core_content_phase  412
    - A6 t7 o- {& X$ L9 m6 Q$ g, K3 ^3 `. _/ s* _0 V
    11.7 subrequest与post请求  415) ~  \. C0 C2 \9 A7 [
    ; v5 E' ]  x: y$ o% E- M  {# _
    11.8 处理HTTP包体  417, b0 o) \; m% ]
    # s, X! T/ P  p+ O7 f" O5 c5 x
    11.8.1 接收包体  4194 L9 a. \0 L: Q5 d6 Y" C7 I4 z* ~$ V

    ) I# w5 g3 L6 X11.8.2 放弃接收包体 4259 A/ l. Y. \3 O0 \6 y
    0 g: v1 r: U4 s  A. ]  k1 {6 @
    11.9 发送HTTP响应  429
    % A3 f4 p3 ^# `; d: g' H0 _4 O* h% e" x2 N! q) w) n" B
    11.9.1 ngx_http_send_header  430
    ; a( ?0 \- s6 }5 d
    1 t* i9 J- ~9 q: Z$ K11.9.2 ngx_http_output_f?ilter  432/ z$ d3 d8 U1 B* V  v4 ^6 e8 j

    & J1 `% e& {& S6 N) j& |9 h11.9.3 ngx_http_writer 4350 e6 ]8 B  ~7 M6 ^9 h' K1 B
    4 _2 M* X4 L; v# T) \
    11.10 结束HTTP请求  437# E# r3 f) g+ k9 ]# L- y( @# H- o: \8 d

    3 Y& g- z, p' m* T11.10.1 ngx_http_close_connection  438
    + G7 Y0 Z6 U* T. d# @; P: W' l8 ?" G- D$ v
    11.10.2 ngx_http_free_request  4398 E% `9 L( T/ f2 q
    ' `6 q6 ?( X; ]1 [) P! b* p/ U! e. ^- ~/ u
    11.10.3 ngx_http_close_request  440; y: C1 B" V: Q! T2 Y  J
    + i* l1 A' f9 L
    11.10.4 ngx_http_f?inalize_connection  441, m) X; E/ ]4 F- A7 s( ^4 R/ ~

    $ o% W' w* R# x) l; Q. X* a: p11.10.5 ngx_http_terminate_request  443. G4 s* g! j5 E: u: b

    3 ~* M+ G  @3 O! ^( L. r11.10.6 ngx_http_f?inalize_request  443
    7 b3 U/ B- q6 J" Q" z  M2 s* x! f$ w" m- h& X
    11.11 小结  446
    " G( D8 l9 M. H( p3 z1 W
    - |6 P3 F5 o3 e! f) K: z0 @第12章 upstream机制的设计与实现  447
    - O! L0 _, i9 o6 ]
    1 q# @. b: X8 j+ b3 Z/ {12.1 upstream机制概述  448" J; b/ r7 l: u( y! d+ X+ j& \9 ]8 f0 [
    , ]" M7 Y+ i* q0 s
    12.1.1 设计目的  448+ d! ^# t: g; w2 f9 ]* r

    ; a. _- J' D, H# C; ]+ a+ X- p9 P12.1.2 ngx_http_upstream_t数据结构的意义  450
    , U% m! ]! \8 J  b0 j8 d. S# r, J+ U, f8 _4 }: }/ C: o
    12.1.3 ngx_http_upstream_conf_t配置结构体  453  e* V; G& B# t6 w/ r  p
    ! c/ w/ `2 q( W
    12.2 启动upstream 455
    6 c5 P3 x8 H3 L# d! r- [8 z/ g) q2 w1 z7 d# X5 M5 Q
    12.3 与上游服务器建立连接 457  w1 z1 p7 T( t  k

    " S; U1 Y9 a4 u; w12.4 发送请求到上游服务器 460
    ' U2 L: r0 a2 g# @  z. C% f* @
    ! B+ m; e. T' Y12.5 接收上游服务器的响应头部 463
    ) ]; R- `; t2 J+ A5 J  G% S& X3 p4 |6 W( v* I& p
    12.5.1 应用层协议的两段划分方式 463
    1 L) ]0 L  I9 w- x* P
    . G* Z) h) ?/ t+ a3 h% A12.5.2 处理包体的3种方式  464
    8 Z* U' s  i, W9 ?& s0 p9 N9 @: q- ?# |7 m/ h* b! s0 i1 l5 b3 q) B
    12.5.3 接收响应头部的流程 465/ y5 l& w& f! H7 N2 @6 W% a
    3 V) [" u1 w& i9 y" ?. o
    12.6 不转发响应时的处理流程 4693 X2 e; O2 G1 ~4 R* a. c
    ( m8 u& S! t' Q! j; N
    12.6.1 input_f?ilter方法的设计  469
    , R  u! y$ ?; w& A/ a; }- f/ j, R, [/ B
    12.6.2 默认的input_f?ilter方法  4709 ~- s" h2 a- g* ^3 Q. \3 w
    7 V, |% D* a) h  K9 T
    12.6.3 接收包体的流程 472
    $ f( Q9 E4 ^! p
    : R9 O% T6 z3 t: h# G- u12.7 以下游网速优先来转发响应 4735 T, X5 T+ k4 C: m
    9 X' G/ }6 G0 h& a: @- ]
    12.7.1 转发响应的包头 474
    ; B& n/ a7 M4 E# A- K& {+ K
    ' w% g! _( [4 H. q+ a; T! h12.7.2 转发响应的包体 477+ v8 M% S6 Q* o# I

    ! k. L1 _. Y% s! U) p1 W/ Q12.8 以上游网速优先来转发响应 481
    & g8 s8 M& D# A) f5 V2 I/ r+ }' ]
    12.8.1 ngx_event_pipe_t结构体的意义  4818 _& @/ i( `! s& c3 A% i7 D8 }8 l

    . q! c4 `$ w8 H/ i1 c1 P! N12.8.2 转发响应的包头 485
    5 Q9 Y- L6 j0 h
    ! q; R; j2 c+ w* s7 [' E12.8.3 转发响应的包体 487
    ' c4 k" C* O/ S% h5 N$ |
    1 {: Q' ~" u0 g0 h/ y  \3 M12.8.4 ngx_event_pipe_read_upstream方法  489; }& E4 x: c( F

    ' j. J9 j" _* ]3 A9 A5 B6 Z" L9 E12.8.5 ngx_event_pipe_write_to_downstream方法  494- ?8 ^/ N, I$ {1 P1 }" I1 w  z4 L, {

    : k$ Z6 ^% ?$ w% J4 P3 S& G' [% d12.9 结束upstream请求  496
    * T! e3 N5 J5 D1 K! W
    5 R% F% @2 x8 _: V. \7 N/ I12.10 小结  499
    + c7 T0 |1 K( l8 {5 N5 r3 _( N3 Q, L, Q, y- o
    第13章 邮件代理模块  500
    9 {! Y. B/ ~/ E8 x& l0 _  v
    7 W$ O! V. ~1 [. ~5 c2 Z' `7 l13.1 邮件代理服务器的功能 500
    1 |; B# ]! h( F/ r& H8 J5 a
    , H% s$ F. w/ h# A& g4 T) a, C5 R13.2 邮件模块的处理框架 503
    . u4 A8 s5 q! d# k4 Y' c7 j" ~, v$ X
    13.2.1 一个请求的8个独立处理阶段  5039 w1 ~8 d, p) X( R+ _# Q

    9 W- J2 i9 `4 a1 C1 _5 _# i8 G13.2.2 邮件类模块的定义 504: S' Q& R) y$ s3 e" q
    . k  `# \3 b+ e* J7 R- |# S1 x
    13.2.3 邮件框架的初始化 506+ J# Q6 q- R% b+ p: ~0 D# t
    , g6 S4 @' c( U
    13.3 初始化请求  506
      }, K1 j" }% R7 M: y. n: l  @9 u# D4 b* F, n0 r( Q
    13.3.1 描述邮件请求的ngx_mail_session_t结构体  506
    5 F/ j5 g! ^: a8 X; n. y7 Q
    & {1 @7 o( M5 g; q- O4 a13.3.2 初始化邮件请求的流程 509+ U5 D; ?& R5 k& d/ z- U7 d# C" {

    4 g. e* |$ \6 W  O13.4 接收并解析客户端请求 509
    . h& q! b! u$ i) \5 n6 K6 r7 d% n1 c* Z6 x5 K# Z5 [0 B' ]
    13.5 邮件认证  510# |! x8 z5 p5 U3 ?

    1 J. a, `& @* S& w' d# v13.5.1 ngx_mail_auth_http_ctx_t结构体  510
    6 S; X3 n/ H0 u% o4 k# Z. v/ E2 c
    1 d% O# [7 {* F2 v0 p* Q, [, {13.5.2 与认证服务器建立连接 511: O$ h& z. ~' i8 n" E0 L/ _

    " N- R) `6 p6 U. \# F13.5.3 发送请求到认证服务器 513
    % \( [3 x# ~9 B5 b5 O; }( r1 ]9 B8 z3 h! x/ \
    13.5.4 接收并解析响应 514
    6 Z- i8 `+ R: r3 w1 |8 N* X9 k$ T7 f- b
    13.6 与上游邮件服务器间的认证交互 514
    + H5 x( Q! Z, }5 j, Q( O7 S* j9 v
    * h$ w8 d7 L8 I1 z4 ~13.6.1 ngx_mail_proxy_ctx_t结构体  516
    ( l- B& ]) ?' y7 |$ R" H* f+ F( z1 Q1 T, p/ R0 g; D' z  c  r
    13.6.2 向上游邮件服务器发起连接 5161 D, a! f2 R! h' T3 ^( Y
    2 O( C6 r0 M# H+ D1 f" @
    13.6.3 与邮件服务器认证交互的过程 5181 n) N& ~  o9 v% d3 ~7 v9 q' C9 D
    4 B4 X5 ?. o6 X2 T5 y- {; w
    13.7 透传上游邮件服务器与客户端间的流 520
    + b; T  Y1 x( q: I* W! M- c) j9 Z" U2 u+ L
    13.8 小结  5248 y1 c( S+ y0 t5 `3 @/ J! b4 P0 y
    0 A/ Z! @. p& _: L3 Z0 S! ?
    第14章 进程间的通信机制  525: g* P3 ^. r3 u2 ~0 @( B* t4 H
    1 H+ b# |( q, B! L6 [
    14.1 概述  525
    % w/ O3 M3 s: g5 o
    # M6 |+ ?- H: ]# v- L14.2 共享内存  526
    - j7 ]  V( `$ F# }( K0 M4 x* S/ R& K. [) w5 y/ g* Q& Z  K) l2 H+ z8 i
    14.3 原子操作  530- P3 c. w" ~; o7 V* U

    ; M3 t, l( R0 Q$ W3 }14.3.1 不支持原子库下的原子操作 530
    - u; P( i* y) K5 |8 Z6 d# E
    ) r9 O* i0 k! w% a14.3.2 x86架构下的原子操作  531
    ( S+ z6 }6 G0 |- Y/ j- J2 d. V2 t* z* c/ K% ^+ R" V0 R! G. A
    14.3.3 自旋锁  5333 |. V7 S/ j" A8 E/ M
    " V# x$ i" E9 W) l
    14.4 Nginx频道  535  r6 P) S6 w- `( j5 J, B  F6 j
    ' z- g: X; D3 K& V! \+ U
    14.5 信号  538
    + `. K* W  ?: B3 a7 F
    ( H, s, P8 h9 x2 v. y$ a/ j* s/ f14.6 信号量  540
    0 F* b; j$ t# y" n/ D
    / A6 w' G- `4 p  P1 B& i14.7 文件锁  541
    % p, ]; u' F, g3 L2 a$ k6 l% f. B! s0 v6 Y/ E5 K
    14.8 互斥锁  544) \4 Z: [% O* l4 V6 Z: q3 p

    . o3 ^6 m9 K4 T+ M0 }+ J# O4 Y, \14.8.1 文件锁实现的ngx_shmtx_t锁  546' B: B( _$ V" D" j- O3 H
    1 j7 q+ l9 L$ u
    14.8.2 原子变量实现的ngx_shmtx_t锁  548
    # G  ?2 f4 [+ S1 K- u% [/ k, V7 E8 B7 k- I
    14.9 小结  553
    , I( \8 Y* T% Y8 N2 [
    8 {2 a4 _+ l5 c5 y* h% [第15章 变量  554
    & a4 F$ z. ?/ g# O$ n5 r! M2 ~. m% q( h
    15.1 使用内部变量开发模块 555
    0 l5 @1 c2 b; a2 i
    3 V+ x: G$ ]+ K( x8 ]7 `15.1.1 定义模块  556  W" h5 u* L3 s5 l9 R

    2 O9 R7 f$ L6 Y/ A1 O; Z+ C15.1.2 定义http模块加载方式  5570 x2 m& g* X4 ^0 P3 s/ P

    " X8 z9 V* `+ b4 v5 \2 B3 {/ [$ H15.1.3 解析配置中的变量 558" H* n, v: C* w* x' r- n

    7 U. ?5 l. u% w) P7 ]15.1.4 处理请求  560/ _1 Y4 |* P0 K# G' R4 p7 v

    5 Q) _! d' w7 G1 Z5 i15.2 内部变量工作原理 561
    / |; L1 c/ K- j% |' i) L6 F+ ?' d  p2 h: N" m
    15.2.1 何时定义变量 561
    ) U' l; f  [  l6 F+ r
    ; }6 E% H* F6 @$ E6 c1 J15.2.2 相关数据结构详述 5640 c) Q. H. T  d! v9 K
    6 R& r8 X: \6 |# `0 Q# W
    15.2.3 定义变量的方法 572
    8 U, _5 M* r  q1 N+ L2 R
    6 s) K( H; e7 g6 n! E15.2.4 使用变量的方法 572
    " w  @, c# M' Y- N3 O( \; K% b& h$ l, g; |+ S& y& Q4 Z
    15.2.5 如何解析变量 5738 K5 T3 {4 L0 o+ Q

    7 h  R/ j( M2 L3 `7 X, h15.3 定义内部变量  576, L9 ?% E* Y$ W% B- Y
    ( R2 T9 p( p) C! x, n2 N
    15.4 外部变量与脚本引擎 577
    " h6 W9 Z! c# j! `8 T" x; Z& i; s# x  j! K% Q: |  H
    15.4.1 相关数据结构 5785 w0 i+ v8 E7 I& g$ n  [% [7 @
    2 H( X, G) d. G. V1 l
    15.4.2 编译“set”脚本  581, O0 V+ T2 x% a; X

    ! j1 D. C+ w7 b% I. H+ i; I; N15.4.3 脚本执行流程 586
    0 @( }5 O: V% @  O
    # T8 |& h) k: k8 s) z- N15.5 小结  589* x+ s# j" x1 w5 h" o9 r( r2 B, I
    " ^: ~1 F- r/ H: J0 B
    第16章 slab共享内存  590" i" p" u4 V/ {' G$ y

    4 R+ K/ M. t9 S5 M6 O, ~1 a16.1 操作slab共享内存的方法  590: ^1 y4 X: }7 B
    7 ?' c4 f1 N4 E+ p1 k
    16.2 使用slab共享内存池的例子  592
    ' ?7 w! i$ c9 ?$ e/ w/ _$ S& O# C; C
    16.2.1 共享内存中的数据结构 593
    ! }4 N; u5 O6 L" h1 N8 D5 E* e
    8 x* A" @# q4 V( o16.2.2 操作共享内存中的红黑树与链表 595* i! |2 Q1 q( ~% E0 V/ g

    % A  b' P5 u/ ^& M16.2.3 解析配置文件 600
    $ ]" V+ x1 E0 w) V  g% A  v- [: {9 ^6 i9 l% Y  M
    16.2.4 定义模块  603$ R( ^; S2 n1 _
    " d" r1 W0 G/ p& ~' B
    16.3 slab内存管理的实现原理  605
    3 ~+ l5 y+ h! r3 Q* P9 z/ M- K9 l4 K7 d% }, Z6 D) E  X; j
    16.3.1 内存结构布局 6070 U3 F( j! S" f0 s; Q5 ]. _6 g

    ' A; r6 Z; u& |- P5 ^, l16.3.2 分配内存流程 613- @. j' D# s& q* n- [1 L
    ) i) i$ B6 F( S2 }) f: t* `% y
    16.3.3 释放内存流程 617: L9 `: r# O& R$ l8 l0 t

    ' b. A, f8 ~- A( }7 {* z% e' O( A16.3.4 如何使用位操作 619
    . J; c% i5 r7 Q' A$ L& v; ?7 E/ m8 X& y
    16.3.5 slab内存池间的管理  624
    3 L( D1 }0 r# r# b; V) Y1 \4 h! G5 Q( s8 \3 X
    16.4 小结  624
    " Z- v$ A+ l* }+ ^$ x3 u# Y8 w( K
    / S$ Y- _2 w3 H% A, S) w" B

    7 }/ v+ D' g* v) d/ J( E- v9 o  Q4 s2 M( v! M5 o' T( U

    4 C4 m' q, L! a7 A- s8 q百度网盘下载地址链接(百度云):java自学网(javazx.com)深入理解Nginx:模块开发与架构解析(第2版) PDF 高清 电子书 百度云.zip【密码回帖可见】20200802更新5 p+ Y4 b/ A5 h. F6 R6 X
    游客,如果您要查看本帖隐藏内容请回复
    - I! J& _  I* ^. ^1 ~

    $ F! f. @' P" ?- M  G
    回复

    使用道具 举报

  • 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 释放内存流程 6174 n: p6 u. n7 X% `( |* `; I
    回复 支持 反对

    使用道具 举报

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

    [LV.7]自成一派

    0

    主题

    306

    帖子

    2724

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    [LV.1]初学乍练

    0

    主题

    31

    帖子

    70

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    [LV.2]登堂入室

    0

    主题

    25

    帖子

    107

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    [LV.1]初学乍练

    0

    主题

    42

    帖子

    92

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-1-22 12:48 , Processed in 0.266281 second(s), 39 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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