java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 39590|回复: 376

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

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

    [LV.Master]出神入化

    2100

    主题

    3758

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66830

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

    发表于 2016-8-1 14:13:22 | 显示全部楼层 |阅读模式
    java自学网(www.javazx.com)-java论坛,java电子书推荐:《深入理解Nginx:模块开发与架构解析(第2版)》
    % `0 \+ w" c1 I- K. x+ s4 M1 Zjava电子书推荐理由:本书包括四大部分:第一部分针对初级读者,介绍Nginx关于获取编译运行的基本知识。第二部分针对中级读者,以一个例子为主线。第三部分针对高级读者,这是本书的重点,彻底解析Nginx架构。第四部分针对中高级读者,以Tengine的开源模块为例。9 ]: r$ w7 ^8 U0 e
    * I+ R" Q' d; G$ `

    & a$ ~; C5 l5 G5 b/ r- q" T作者:陶辉, P% a# d8 s' C' R
    出版社:机械工业出版社, G. \% v! t+ K( s
    出版时间:2016年2月
    6 c. S, K6 d& t, _# ]
    $ ]3 @0 U. A, @% M# _$ A# A5 S

    ' i6 h! [# b6 \% e QQ截图20160801140226.png $ r% C; s3 h- \$ }% ?/ `: q

    9 Y# f# `" N0 @

    8 q  I  @& f! X4 Mjava电子书目录:
    % M; x  d2 ~$ a0 H; t8 ^! z& V) @! q3 N: m/ ]& }- p
    , R( w$ P1 O; p- Z/ r
    前 言& J' ]+ n0 D  I& M( b$ A

    , o; b4 ^  z, @3 v9 t& Y! v第一部分 Nginx能帮我们做什么* {/ _( q3 a) n, h, r
      d1 P" Z; ^+ j4 n* I* a
    第1章 研究Nginx前的准备工作  28 X, P& }" f% X+ L8 d) [4 F
    + O6 |7 o7 Y5 z+ {4 _1 v" i
    1.1 Nginx是什么  2+ f/ P8 ^8 `6 M7 h; q2 L  N
    2 i9 J3 R* s6 x2 t* q4 Q
    1.2 为什么选择Nginx  5
    ; M9 b6 W( i% H
    $ D& X. }0 G) d6 ]0 h& O7 R1.3 准备工作  7, k( ]; A% X( m/ B! }) _; F5 L7 b! g9 `
    " [* j* f% [: R7 a% `  U5 S
    1.3.1 Linux操作系统  7
    " j* M3 q. }6 u; `/ W4 ~  L" Y( Q1 |9 l+ ~% [! B
    1.3.2 使用Nginx的必备软件  7
    : H* [0 L% P) }) o
    + \8 a6 ?; [8 J) G$ H" \* F* P1.3.3 磁盘目录  8" O# q+ R( N8 s2 I& E, r
    2 O7 [' r' b& Z1 J0 `7 [
    1.3.4 Linux内核参数的优化  98 d4 b0 m3 B+ r* X4 I$ N# t

    # b/ r6 k0 z/ a+ \1.3.5 获取Nginx源码  10# E& J! V+ M5 n( o, {; R3 M$ J

    * L) t4 ?: w7 A, e& B/ m, {1.4 编译安装Nginx  116 \. H% P5 ]$ y1 k4 i1 R+ z" A4 Z
      R# i  W8 A3 G
    1.5 conf?igure详解  11$ r# x' l) b, t- h- o+ r# I8 }
    ) ^3 e% L  H! F/ U
    1.5.1 conf?igure的命令参数  11
    $ q; x2 V8 C: q
    7 A. r2 z) I( A7 e4 ^  I1.5.2 conf?igure执行流程  18
    ( l7 y" r+ R. i7 E) [$ a8 B( t0 y4 v; ^( x/ ^0 ~
    1.5.3 conf?igure生成的文件  215 v, r, j0 O6 x% B4 S+ K

    " t9 T! h& t1 M  q' ?1.6 Nginx的命令行控制  23
    " [! U4 @& s6 j- R, C% `: H$ M, ~! X" b
    1.7 小结  27
    1 k4 F- o6 A3 }. k6 _8 a8 n9 f* j% ^) j; v$ f
    第2章 Nginx的配置  28# [* K& t' B& a5 b$ }2 }# f6 n
      {( g2 s: v) Y& J
    2.1 运行中的Nginx进程间的关系  28# T3 J' {, `# b+ s8 A4 N, J5 x

    # s8 f/ o& y" O$ B& w2.2 Nginx配置的通用语法  317 w# M5 F- d( a0 v5 f
    3 K! C' x8 H' u9 S1 B- p, m
    2.2.1 块配置项  31; s5 N( g- @0 u1 h/ e# l0 U1 J

    9 a. C3 `3 n) m7 q0 Y# a/ N2.2.2 配置项的语法格式 32
    $ j) o7 D# S/ ]% {* X
    9 b8 ?, `9 G3 n. ~9 D) `$ x2.2.3 配置项的注释  33
    & V" w# t, X6 n4 U6 M0 |7 f1 f4 }% y' S+ @7 n; k0 l
    2.2.4 配置项的单位  33  l  P: \/ n2 p9 ~

    2 w( [% J+ b# [; R2 B/ c8 e& a2.2.5 在配置中使用变量 33
    / k% X/ x5 q7 {+ W
    / a/ A! g% j, y9 T2.3 Nginx服务的基本配置  34
    # e  _' k) y) u# C* @3 [* a$ o7 ]8 y/ i& n) W5 R. O7 \
    2.3.1 用于调试进程和定位问题的配置项 34* H' O) Z* B7 ~4 P% C! t, L
    & a8 n6 u6 `% ~% ^5 F  ^
    2.3.2 正常运行的配置项 36
    ' s7 C& L& x) F' N* D' g# d) ~( f8 s: q3 k# ?
    2.3.3 优化性能的配置项 37
    5 Z: I- m+ T  N0 q5 Q  o$ ]  z  B$ M1 d- d  C
    2.3.4 事件类配置项  39
      q' S5 ]5 y7 }0 R8 F
    / l) v2 S, c2 k0 ?3 L% A# Q9 q2 W2.4 用HTTP核心模块配置一个静态Web服务器  40! v& R8 A! s* N1 y* l- {. R
    ( E) T& V6 }7 z/ L2 ~
    2.4.1 虚拟主机与请求的分发 41. w; ^% u* U0 A/ e- t4 u# M- E
    ( S) g* Y0 |- g& E- e
    2.4.2 文件路径的定义  458 A; W+ \# v* W9 o7 V2 [3 j! a- y/ Q( k

    # A5 a6 c7 t# z- p2.4.3 内存及磁盘资源的分配 47
    ! i; i2 @, j  V: u
    , ?( b4 f1 R0 N! ^. v2.4.4 网络连接的设置  49% W& N$ P, r. w
    # }# @2 C7 G" @* p- Y! O1 T
    2.4.5 MIME类型的设置  524 ~5 j% g+ X) G" Q1 l7 v, ]: u: g
    % R+ X% y8 x- q4 R  B* k& {/ ^
    2.4.6 对客户端请求的限制 53
    ( e$ |9 n  p* F
    # _# p! z* d( j+ n. G2.4.7 文件操作的优化  54
    ' @) T, n# J, Q9 C5 b% }3 g# S( a! h0 Y7 I
    2.4.8 对客户端请求的特殊处理 56
    / j% @4 A/ J: @* G" l
    2 `! t' J9 n: T( v2.4.9 ngx_http_core_module模块提供的变量  571 n1 X, D! k4 K

    * ?# P0 T' m4 N# R4 H2.5 用HTTP proxy module配置一个反向代理服务器  59
    % Z# I4 X) f; j" V4 O; m: t# ~8 [+ _$ [7 y! Z
    2.5.1 负载均衡的基本配置 61
    7 q+ h+ Y! e7 k" T5 G0 n( U; I4 ?: y( z! H8 l/ s
    2.5.2 反向代理的基本配置 630 C$ U" I4 j" W

    3 g8 Y: Z9 P2 \9 j/ T$ Z2.6 小结  66
    0 o& }' a. |, D; R- K1 K( w# h6 \! R7 K
    第二部分 如何编写HTTP模块& R4 u8 t! z5 y7 N
    6 _/ b- U6 X/ Z" l8 M) Y: u7 b
    第3章 开发一个简单的HTTP模块  68
    ( V0 |0 o" B4 a  t, e. ^+ Y4 W6 Q( k# B6 G8 N4 Q1 J" z& I
    3.1 如何调用HTTP模块  68
    $ U; o, I& s  p6 o* I
    / j1 w- M1 |6 F7 X3.2 准备工作  70
    4 x* j; {- y9 p9 k2 |9 \$ y$ B- r$ t! R/ ?7 X
    3.2.1 整型的封装  71% t! l  o* r+ ~1 _
    % S7 j. e! A( y  I3 d
    3.2.2 ngx_str_t数据结构  712 G" `2 m8 j1 h0 [' ]  y: T4 K
    ) P' o/ N6 w& F, }
    3.2.3 ngx_list_t数据结构  71" i3 }1 A& B0 s+ S# C
    5 _6 F& I* K$ a0 Q7 i
    3.2.4 ngx_table_elt_t数据结构  75
    . X3 m- R/ Y; X3 O* T" X* C* l9 M) [9 d- [: s2 U0 ~
    3.2.5 ngx_buf_t数据结构  75
    % `' g1 W9 f7 a
    , w1 v3 r5 X% q) l5 D* U. J, T) [3.2.6 ngx_chain_t数据结构  77
    4 H3 I' p' K0 l$ A/ J0 j' J
    ( t! [  o" b, l. [% `# k+ K3.3 如何将自己的HTTP模块编译进Nginx  77
    2 B( J$ `: r  s% a+ F
    ) V8 [6 g- P" t. {0 v  [. L: G3.3.1 conf?ig文件的写法  77
    9 L& }. ^. a( [5 G1 n; j/ Y; _; l/ s8 \  O( J6 a
    3.3.2 利用conf?igure脚本将定制的模块加入到Nginx中  78
    ! a/ L, l2 u8 U) Z8 C
    ; h# J" G: D3 ?4 F) ~3.3.3 直接修改Makef?ile文件  814 K& v) X4 a7 T  L7 t% G: o/ w
    7 x2 z* F2 _& e" a5 w9 O: ~" ^: T
    3.4 HTTP模块的数据结构  82% m) C* o- {7 e2 {

    5 H: X3 T1 k. |0 T) A7 Q3.5 定义自己的HTTP模块  86  W1 L! D; [8 K$ s
    . X3 g- j1 `9 e2 {% w1 ^
    3.6 处理用户请求  89
    9 t/ u' N0 e) ~: U! w. Q
      c. p! _' `5 T1 N3.6.1 处理方法的返回值 89. X1 U5 W8 f7 ]4 D
    , V4 q. v* b( j  O
    3.6.2 获取URI和参数  924 ^# u, H6 [% W7 ?
    0 ]+ L9 \1 a3 o& d& M
    3.6.3 获取HTTP头部  94
    7 m: m8 n7 O' @; ^7 L2 u
    1 u  @$ L6 i( g0 r6 j3.6.4 获取HTTP包体  97( I- R( S* C  u3 Z* B$ Z

    0 W5 i5 ?0 G; l3 W" g3.7 发送响应  99- u  S( e( x6 |, R9 g, A

    + c" f; D* v2 I* P3.7.1 发送HTTP头部  991 x; E# i8 p' l" U6 M, j
    ( a' e7 E8 {7 F4 ?. U# _" ^
    3.7.2 将内存中的字符串作为包体发送 101
    ( Q3 M% ~' V  N1 S: i0 ]! v
    : C4 L6 T4 U7 C( C$ t8 [3.7.3 经典的“Hello World”示例  102. ]( |5 J6 E% x* R3 g! a9 r
    + Y4 z( B: d1 t# T/ k7 r' M
    3.8 将磁盘文件作为包体发送 103) \3 X. Q( h* s( h- I" C8 H
    $ [! m* z  T% W* Z5 {
    3.8.1 如何发送磁盘中的文件 104# Q4 p7 w# X4 C1 s8 y4 n$ G' E: c

    ) Q/ m. F0 P% Y6 ]& m3.8.2 清理文件句柄  106
    * ]4 h' f& z  |) y( }
    1 p, y2 ~" H' J  z& [1 t3.8.3 支持用户多线程下载和断点续传 107
    6 U* z2 m/ y  |/ ]8 t
    ; O4 J) N* _3 p0 j3.9 用C 语言编写HTTP模块  1081 H5 X3 G% _+ ^5 e% v

    - Y; ]* h" _7 C. }! f; O3.9.1 编译方式的修改  1088 m7 O2 _& w+ E

    & _! _* a, j: p+ _/ S3.9.2 程序中的符号转换 109
    7 N, U0 j# m; I7 A( C; s
    . n4 K1 G7 G9 O1 b1 b3.10 小结  110
    0 {' z; I0 H8 u! h+ \! J
    7 q) `1 K# }3 y7 O5 ~$ p第4章 配置、error日志和请求上下文  111
    . e" c! k# n* O& L
    ' }: b) ]. p: B3 \/ O3 p* b4.1 http配置项的使用场景  111
    6 F0 c% _) c9 m% x( T* F- o# a- c/ w  Q8 U: @2 x- o/ H
    4.2 怎样使用http配置  113
    ) n* w& a& b2 G  x9 k. k
    % d5 Q, X, N& `; K  Z4.2.1 分配用于保存配置参数的数据结构 113  \8 I. h) O$ E, K0 s

    0 U7 r7 @2 `) [4 K. ^- b5 `: q4.2.2 设定配置项的解析方式 115: N; M6 X+ Y7 @6 @4 H4 |

    # i. z) s% t; R: p* t3 U4.2.3 使用14种预设方法解析配置项  1218 S8 s" |# }' ?( `2 w! ?8 [5 M

    3 U8 x- k( V! \7 n; k4.2.4 自定义配置项处理方法 1318 t& p& ^0 k& B+ d) u6 O/ a/ J. V

    ' H) Y' ^# d3 K0 p2 v% X- m4.2.5 合并配置项  133
    6 |& ~' t( |& A5 p5 u# v1 \# u
    # H4 L1 P. m4 r( x* N* O! b4.3 HTTP配置模型  135
    2 U- G$ l+ W' z6 m* |& a2 n: v$ W; _. Y  a9 T2 O6 ~( R3 |
    4.3.1 解析HTTP配置的流程  136! U" j5 x9 h, ?8 ]1 i

    " A) ^0 l% G7 V7 f9 M+ J. P4.3.2 HTTP配置模型的内存布局  139
      F0 F/ W* X  @6 r6 I8 X8 {
    7 o; b; B9 }! @; R4.3.3 如何合并配置项 142
    " h7 h) N, y$ ^. a
    8 [+ m7 l8 z+ k7 l7 H+ `$ X- @  l4.3.4 预设配置项处理方法的工作原理 1449 S  _8 O( k+ p, J4 B
    8 j6 s& n( I$ Q
    4.4 error日志的用法  145
    7 W' F6 _/ ?; G5 |& f9 g
    . z  ~- o$ {! c$ p5 K# C# t4.5 请求的上下文  149
    * T0 h2 z6 g$ {' Y
    ; H: C. W; b) W# f7 d, C* }# e: y4.5.1 上下文与全异步Web服务器的关系  149
    0 [" `! w9 b6 i: g3 t; _% J9 x  m( a9 \+ e7 B$ t: R9 r% ?: X3 c& P
    4.5.2 如何使用HTTP上下文  151
    2 Q& a) W8 @$ e  F0 y- [. g
    ! _% J% ~( l4 `4.5.3 HTTP框架如何维护上下文结构  152
    & U, J/ i. n3 S- b; N* G
    4 u1 q# L" X) ^4.6 小结  1536 C% Q/ i% b! O3 L# l; y6 l

    & |1 C  l+ O9 q) S第5章 访问第三方服务  154' O4 t+ l# a+ }$ F/ {" ]: e9 ^1 C

    5 c# c$ k, J0 K' P5 r5.1 upstream的使用方式  155
    ! _5 Q4 G' j6 b  P- |. X
    8 f0 `/ p$ F) u0 E* L1 o5.1.1 ngx_http_upstream_t结构体  158
    : d/ _& ?0 F  J2 w! ^7 b7 ^, r' ?* E1 A2 \  g
    5.1.2 设置upstream的限制性参数  1590 S8 D* s& [+ a, i, m/ U+ X
    6 U6 G5 o1 T* N# F  y
    5.1.3 设置需要访问的第三方服务器地址 160- y2 z+ f; v" P$ p: g0 U

    : g1 M3 w+ j9 T2 Q, w5.1.4 设置回调方法  161
    $ C8 s( G9 i$ I  G# d& }! K3 k) m+ Z, Q( r; Q
    5.1.5 如何启动upstream机制  1612 W- T- q6 ~! ~4 R. l2 P% V
    4 J# `7 @1 X' C
    5.2 回调方法的执行场景 162
    7 N. k! m! z" _5 S4 S
    1 P; a' q( ~2 b4 k6 f& ^5.2.1 create_request回调方法  162
    : |8 R; v, {$ v1 _+ W5 M- r7 F: N5 \$ {  g0 {- l1 S
    5.2.2 reinit_request回调方法  164
    ! N' W5 Z1 b8 J! n) q' D5 L
    ; O0 k/ m7 m  c' I- |; v: Z4 n5.2.3 f?inalize_request回调方法  165
    - S! r# C. G" n2 _" Z- j
      y6 v* m: q( J2 \# N6 _5.2.4 process_header回调方法  1659 D$ a. N* g8 N" g+ [! R, L- ^
    2 }" ?: p" D" I
    5.2.5 rewrite_redirect回调方法  167
      F# {6 k# H( B  c# ^7 I8 _) `: W, F1 c% m- _, u/ K* s! a
    5.2.6 input_f?ilter_init与input_f?ilter回调方法  167* O6 ]* F& r$ U( w) i3 p. x

    & r+ \7 S+ w- e+ S" P! l5.3 使用upstream的示例  168& N- ?) S9 b: I+ |; o
    & Z9 }7 |# G0 p* Z* W9 }7 i  B
    5.3.1 upstream的各种配置参数  168: |" {' R- p1 u: s# _! f  C

    ) O! P( ]' r3 A7 p3 a& k" c5.3.2 请求上下文  170
    & p* w& m1 y5 e2 w+ }* A! E3 h
    5 e( m& K" Y* T: y4 k7 |7 Z5.3.3 在create_request方法中构造请求  170& q& m/ ^  X2 ^. t

    5 k' E4 d! c$ u' `+ x5.3.4 在process_header方法中解析包头  1713 ^, h9 z, k$ s1 M, Q, d; T
    , `3 ?- J4 i; n* C  H% }
    5.3.5 在f?inalize_request方法中释放资源  175$ B/ H9 ]2 y% C! W  _" G

    8 L2 s9 W4 g" [; \' y6 \8 Q4 g6 U! R5.3.6 在ngx_http_mytest_handler方法中启动upstream  1752 T' Y2 F% U3 o  F  m

    ; F1 _! s9 v5 I  K& P' m5.4 subrequest的使用方式  177/ d/ J4 y, A5 v  H0 L) B

    ' [0 ^- a! Y6 s" v5.4.1 配置子请求的处理方式 177
    ! @1 e. r6 A  _! ]
    . W; e( G& y; Z; V3 z" a5.4.2 实现子请求处理完毕时的回调方法 178% A# ?5 N0 U: `% ]0 U7 v* ^
    ) J  ~& B3 _) \* a1 e
    5.4.3 处理父请求被重新激活后的回调方法 179
    1 n% ]1 v2 D+ C; M3 N4 t. |) X2 K
    9 T: H& s8 x. y/ f9 X. Y5.4.4 启动subrequest子请求  179
    2 Q- Z( P" H: g+ M3 H. ]
    2 K& @9 j; P$ \' o5.5 subrequest执行过程中的主要场景  180
    & y6 F! L8 W( h! A( @$ l- \' E, i0 ^7 U  @6 G3 n* M/ v* u5 S
    5.5.1 如何启动subrequest 1803 a6 o5 R8 b6 M  w

    ( C! @6 u( t" r0 w  @7 d$ F5.5.2 如何转发多个子请求的响应包体 182% }1 q0 Q3 B) C* ~) x
    , C  J  Z& O- }* X
    5.5.3 子请求如何激活父请求 185! b9 [+ e; t3 e& n2 P

    , e6 K8 u: F, O( e: I, O/ ]/ x5.6 subrequest使用的例子  187$ ~& ^3 e, L5 v& h4 {. a4 n
    . X. X8 M" o* D5 X
    5.6.1 配置文件中子请求的设置 1871 o) _, r) t# O2 _1 x$ y8 d

    5 }3 D7 V# n/ O- K5 I3 {( S! D" _5.6.2 请求上下文  188! y7 [1 w! a" n; W

    " k; T% k( q. E5 z" s. D/ N: |, c5.6.3 子请求结束时的处理方法 188% V1 q) g' L/ q/ r

    7 h5 S8 B+ i- @5 M. `+ Y5.6.4 父请求的回调方法 189/ }+ @* v$ {* C' N$ a, m- c
    * q; s+ r' Y% W# \/ M% B6 s6 s$ E
    5.6.5 启动subrequest 190
    , Y7 Q+ g3 Y5 V4 O" n  |
    - I2 g  U. ]2 a3 L' H3 ^7 A5.7 小结  191
    : Q5 o7 L, z* r5 {6 O9 y5 w8 ?; r7 q9 Q% z
    第6章 开发一个简单的HTTP过滤模块  192
    8 R7 r. c  }" Z; d' u7 T0 l9 q) }2 I+ E/ e# u7 p
    6.1 过滤模块的意义  192
    , |6 r4 Y2 U' ]1 X8 C0 r
    . E) {2 ^+ G0 k0 ~2 ^& f, T; [6.2 过滤模块的调用顺序 193
    3 n+ V- o8 K  U: }+ h% ?% J1 D  h1 M9 C4 J- ^) G- w. A4 b
    6.2.1 过滤链表是如何构成的 194* ^+ t  g; K& t; {3 e
    ( ?. B. D+ m5 S0 u. L
    6.2.2 过滤链表的顺序 196
    - m6 D* G- h" ~% C, `: T" g; f* d2 F) H0 {6 J5 H  P  F
    6.2.3 官方默认HTTP过滤模块的功能简介  197
    5 D# A% r# z& Y  r5 @/ i$ K3 A! n, K. R" F! L
    6.3 HTTP过滤模块的开发步骤  198* P+ s( W  O5 n- ]

    + d0 T: W- q& c3 ?# m6.4 HTTP过滤模块的简单例子  200
    * m6 h) t3 C4 W) D; ]
    4 m5 d7 `8 o  c( c8 _8 D6.4.1 如何编写conf?ig文件  201
    0 B( w* [/ R) ]$ ~, i. ]9 }& q% m- r3 y4 {( O- P6 r2 t. \4 |
    6.4.2 配置项和上下文 2017 t  [9 k( ^8 Z  @6 `1 f
    ( {+ S* o/ f$ ?! |! J
    6.4.3 定义HTTP过滤模块  203
    5 _4 E0 V* \9 v$ f5 _, a$ L2 w% N3 Z% I+ n$ y# J
    6.4.4 初始化HTTP过滤模块  204
    2 b1 t, o+ L4 P9 T% g+ d. [, m2 g1 H1 t5 N* b
    6.4.5 处理请求中的HTTP头部  204
    7 ]; L: V6 v* Q
    - V/ e. z! `+ S. B( n* n6.4.6 处理请求中的HTTP包体  2062 b) O. N, U  o5 o% u

    0 Y$ k! I" x4 p3 E" j& ^6.5 小结  206& M, C- ~9 c6 r) Y' G
    , h: j8 z" l9 y8 k
    第7章 Nginx提供的高级数据结构  207
    7 r" J9 ?1 O/ _
    0 X( R2 U/ E* j* x$ [+ w% b7.1 Nginx提供的高级数据结构概述  2071 h, Z# w* S9 S% B8 T  D4 W5 O
    # \' W# B* }8 `5 r
    7.2 ngx_queue_t双向链表  209
    ! f& F, D2 Z% m0 D8 H5 {: g, Q$ N: ~; s9 f; X) m  B
    7.2.1 为什么设计ngx_queue_t双向链表  2097 \7 `1 b7 @; e0 N
    " z# k' s# G3 N# e0 g
    7.2.2 双向链表的使用方法 209
    4 s' E3 u  a: f. o" O# T: v% y0 F# _, B- r6 d
    7.2.3 使用双向链表排序的例子 2127 R% f2 ?0 p- |" P% S3 f3 c6 S

    3 w5 L" q1 ?% o4 Q! s6 n5 m- I7.2.4 双向链表是如何实现的 213# T( n, O8 R9 ~) k, ^
    " E+ d% }( W' N" u
    7.3 ngx_array_t动态数组  215" P6 x- @$ S! z* j  |' B" ]

    " q  @- v# R6 Z7.3.1 为什么设计ngx_array_t动态数组  215
    & J$ t3 a% P  Y# s/ k
    + ?. w- c" P4 u; A& w7.3.2 动态数组的使用方法 215
    ! f: A# `5 H# T# H( F+ Q" i* j+ c* l% s0 f
    7.3.3  使用动态数组的例子 217% s  _8 i1 S7 G2 r
    $ b$ w4 @% k/ U
    7.3.4 动态数组的扩容方式 218- G9 ]# W' u; Z
    & c: {6 M8 r! P  C( x/ M
    7.4 ngx_list_t单向链表  2193 Z" Z1 o) x2 B' N' I! j

    8 J. y) ]; q8 Y/ Q7.5 ngx_rbtree_t红黑树  2191 |2 {# ^& v/ g( T2 M- i
    8 N- C! j, z; B$ e  _) F
    7.5.1 为什么设计ngx_rbtree_t红黑树  2196 ]% _3 @4 M; p: H' g8 e
    % E* {, l; l; u- |; _5 w
    7.5.2 红黑树的特性  220
    4 \! L' l5 [  ?/ Y$ ^2 Q. W
    6 n" u. Z. ^% w4 r) p" R1 s4 N) t7.5.3 红黑树的使用方法 222
    ! ^0 y. |  {/ }' Z* c
    6 U, h# D, r0 t5 `6 N! z* Q3 `7.5.4 使用红黑树的简单例子 225$ X$ F3 R. p" b9 \% Y" H% \
    # w: u8 Q6 Q. W+ ]& q; q1 o3 E
    7.5.5 如何自定义添加成员方法 226
    3 w; U* j# l% h4 u% E% N/ \- N
    ; v$ w6 k8 X. s$ I7.6 ngx_radix_tree_t基数树  228
    9 C/ u7 r. n  ~
    ; s% Z1 ~* ^* N( B7 `( j7.6.1 ngx_radix_tree_t基数树的原理  228
    " X% c4 M9 s2 f4 [( v
    ! |+ X! K( }# w: ]/ W7.6.2 基数树的使用方法 230$ [3 ?% `% y! k7 u$ {- T5 w8 R

    7 I- e7 I/ V; n& k/ `. r7.6.3 使用基数树的例子 231, M' q2 `% q' k7 }7 s% s) s
    ) p* x, W+ E2 j) _
    7.7 支持通配符的散列表 232) z. `4 u: Q/ S& `. i8 {
    4 ]8 O2 A$ u! N/ D' s" h' L5 C0 j
    7.7.1 ngx_hash_t基本散列表  232
    8 _' }0 Q+ L1 V+ r) U" z6 j6 A9 h, X3 L; C: S# g
    7.7.2 支持通配符的散列表 235) ]* p% [4 [4 }4 _8 S* k6 _) t0 x

      c# q3 v% d$ l! |' q7.7.3 带通配符散列表的使用例子 241
    ) i/ ~# f, G- f
    3 ~! P# R2 y0 J" B' B7.8 小结  245
    6 }9 F6 `% U& W( Y% w) `- H% q8 E) F0 @+ R: u3 h0 e; W
    第三部分 深入Nginx6 P5 m& p8 _. l# H& |9 O/ ?

    8 I$ Q+ z# j( J6 E8 ?第8章 Nginx基础架构  248& l! X4 D" h  `) I, K+ a+ A1 a

    " D% {0 d0 n# L4 Z; T( h9 X8.1 Web服务器设计中的关键约束  249
    6 ~9 F2 j5 l5 F1 G4 \) N# G# ^8 i& x: ?- Y# |. M- C+ j* k2 ^
    8.2 Nginx的架构设计  2510 K0 c2 j0 }# q

    6 N7 w3 S( r: v0 _3 L$ D8.2.1 优秀的模块化设计 251
    5 o' F6 o) {- E7 ^0 E* h0 r7 q: a
    7 F' g; h+ p0 I' Z9 W- A6 g2 M8.2.2 事件驱动架构  254
    ! a) `- }: [) S7 f/ r7 E- g/ L7 n$ t8 h# z% i2 ~! E: X
    8.2.3 请求的多阶段异步处理 256& h) V! R- l+ ?

    ! ~9 i' b0 }. D1 Y, e8.2.4 管理进程、多工作进程设计 259
    1 D) E$ D$ V9 t6 K. v) X
    # v4 K" F: W  V7 O9 i# F, M8.2.5 平台无关的代码实现 259
    * e; N# [% U0 t# H; j2 f1 Y! K. ^/ ?. a
    8.2.6 内存池的设计  2599 }7 v) f: N; x+ {5 G; J& K2 S/ t

    ! P8 M4 V+ F2 J( Q* u8.2.7 使用统一管道过滤器模式的HTTP过滤模块  260/ q8 d' T% r( a# z1 D/ M

    3 R: F  y: u) g( ~# n/ R8.2.8 其他一些用户模块 260
    + D2 j, M4 _% S/ T* O. F8 r) k/ L. Y7 p
    8.3 Nginx框架中的核心结构体ngx_cycle_t  260( l4 V* y7 p+ U4 h3 v
    $ ~- M' K! c  h
    8.3.1 ngx_listening_t结构体  261
    ) L+ O$ l2 o6 c- W+ O; l; o. |; T) A
    7 I2 x# p' E' Z/ P% T; w& t) u/ g8.3.2 ngx_cycle_t结构体  262" c: i+ V/ @. t6 k) a! A9 ]8 ^
    : P: H  R4 X1 E% C) b) }
    8.3.3 ngx_cycle_t支持的方法  264: a. |- Q- q0 D
    # B% @$ u6 w) Y/ C9 W/ J5 T; U
    8.4 Nginx启动时框架的处理流程  266+ X3 N4 ?- ?. p" E

    ( z% I- t, ?6 B+ X. ^" M0 j! c8 c8.5 worker进程是如何工作的  269
    ! b1 X$ y- g7 j. F7 p
      O) I' L' ?0 K8.6 master进程是如何工作的  271
    + [$ j- P1 ]4 U3 B- W" G' c. a
    ; [( V, g, E2 k' M0 w8.7 ngx_pool_t内存池  276, c5 k8 ]% k* x7 W' {; M

    / P8 z' R2 ~" ?" F. y9 r% ?8.8 小结  284$ m- M2 e5 J; p6 R( m8 @$ x7 d

    " S, v4 m; c4 D' l第9章 事件模块  2854 _4 y4 q/ k. A0 v& S, T5 o

    * q6 m% ~* V0 y/ [9.1 事件处理框架概述  286
    * P& W" }3 q) d) u4 e/ u1 v7 o( d$ r
    9.2 Nginx事件的定义  288: t0 o4 C; O5 w3 m

    6 S* v( ^1 L* g9.3 Nginx连接的定义  291
    " g# c9 e- t( W2 G& W. ^
    & B. t  h4 S( P9.3.1 被动连接  292. ^4 {/ C: j$ q  L
    7 w& L) J3 ]+ r" i3 [2 T
    9.3.2 主动连接  295# j/ Z4 j  M' a* E9 q0 {* A+ \

    $ j* G/ K+ A5 }" c9.3.3 ngx_connection_t连接池  296- V- g  s6 d  }6 p+ B$ ]0 H6 o3 z* U
    : V4 E+ D7 U5 f6 e; F, h" G4 x, E
    9.4 ngx_events_module核心模块  2970 E& b0 ?3 n, w3 b2 d4 Y

    7 p1 Q$ ]1 p. M* T, m3 E9.4.1 如何管理所有事件模块的配置项 299
    ( n/ b& \; p1 ?1 D2 U/ n3 ?0 ~" L6 C: J
    9.4.2 管理事件模块  300+ T0 t0 N1 W3 S4 f1 z8 H

    / ]$ |5 `! n6 e& @. n$ c$ w9.5 ngx_event_core_module事件模块  302
    + K* s6 |) v1 C: e1 g* P" W/ `- i
    : W6 N6 n4 c1 H9.6 epoll事件驱动模块  308/ P. R6 [4 O- T7 T

    1 k% r3 q9 ?7 x, e+ w5 U9.6.1 epoll的原理和用法  308
    ) f$ b( ~4 `4 |6 Y" Z
    0 p" G: C" v  N5 V9.6.2 如何使用epoll 310' o8 V3 p5 s: _& e# m( J# p+ k$ \0 w
    . o$ W; [% Q: O* h
    9.6.3 ngx_epoll_module模块的实现  312
    4 ^" g) y+ }: e+ X0 ^! {' B8 o" y) N3 ~' P- x; f
    9.7 定时器事件  320# a: Q. K/ o+ m
    4 ^" P4 j% [4 }( ~* C4 \# S) M2 y
    9.7.1 缓存时间的管理 320- h3 [0 r, k- A; L; z1 r/ y
    % V( d' o! F# H
    9.7.2 缓存时间的精度 323
    5 `0 T4 v+ i7 c2 }6 K1 h8 l# a
    0 Y: Y0 z2 s  X) s/ o) l9.7.3 定时器的实现  323
    " V$ Y: E; e/ N
    # w1 Q8 `* c( ]# N- v9.8 事件驱动框架的处理流程 3248 ]) K* m' I( w$ K. w/ T

    3 P' z) ?. Z2 F' j. c9.8.1 如何建立新连接 325, ?8 M# b: U* ^$ ?
    8 ~$ i0 a5 Q. y) ~) q
    9.8.2 如何解决“惊群”问题 327  W4 _' J' v* k
    2 n2 V5 X$ z9 B8 ^1 c8 C  @# A2 q
    9.8.3 如何实现负载均衡 329
    2 n- m% m6 J0 A7 \* X# S& z( z
    * Y! Q1 C( V/ Y# N! `: h, o9.8.4 post事件队列  330& j, P9 S4 G# M: q8 ~

    : ?; V: I2 v" ^5 a+ r& k9.8.5 ngx_process_events_and_timers流程  331
    6 W8 h7 p' ^' D- ~; Y- ^/ f3 O' f0 B5 Y4 `3 Q8 S
    9.9 文件的异步I/O  3343 U+ J, ?/ Q6 S8 [! h! {
    4 r  r: v6 T8 P2 h- u; U& {3 W
    9.9.1 Linux内核提供的文件异步I/O  3357 f+ T0 G, x7 O& L% }
    5 f, i4 W- M2 m6 z# G( {( ?$ \2 v
    9.9.2 ngx_epoll_module模块中实现的针对文件的异步I/O  337( M1 Y1 F6 s% f/ Y. C" Z/ [) c2 i% m
    : X9 y" U# \; O3 j% T: Q
    9.10 TCP协议与Nginx  3429 y4 I& ]$ P) ^9 y7 j0 W/ f9 X  r) C+ m
    0 s5 ]3 B! }# c" n" w/ g
    9.11 小结  347
    # y' @! K) [' ]' D" k% y4 p  ?. H5 Y! x* _, ^- ~; b& R8 q" s
    第10章 HTTP框架的初始化  348
    + l# V8 O0 U* N( L6 `
    / z" _8 Y- z. a4 z$ j, i9 T4 a10.1 HTTP框架概述  3495 A& O# J8 u" O

    " p  _  A  M, e; E0 O% r% x- S10.2 管理HTTP模块的配置项  352
    5 [" U: w# C5 M! Z( D/ p' G; ]! ~4 p1 I- p: D+ r
    10.2.1 管理main级别下的配置项  3530 {7 W+ Y6 i' q* r  o- B5 o' d

    8 }) T8 c; h8 z10.2.2 管理server级别下的配置项  355: ^  q0 Z" q, L4 I( z4 |; L. D
    % m5 m  I8 _9 P* J+ D4 K, \4 p
    10.2.3 管理location级别下的配置项  358
    1 Y* Q) U: \6 x! n/ H+ {
    + y( U0 V. f. u+ k+ u8 f3 F' S10.2.4 不同级别配置项的合并 364
    ! r: b* E7 }( ~$ W
    4 ]- x# J" y: O" S: B) k10.3 监听端口的管理  367
    - g" g) y" m1 m2 x) Y" V$ A/ K  v& l; K0 ~- m
    10.4 server的快速检索  3709 {& g# w! [: p4 |- O: ]

    1 @& J. R: b2 N  Z# N$ H10.5 location的快速检索  370
    5 M. c. B# [' J3 @  b+ @! \1 b, x, k2 q: M, L
    10.6 HTTP请求的11个处理阶段  372- _4 p, F! d" `/ b+ e
    # p$ S+ X7 n2 g: h- }4 }' n1 A  P) |
    10.6.1 HTTP处理阶段的普适规则  3747 t+ z- z" H6 M8 y
    # O/ D1 a8 E; [1 E. U
    10.6.2 NGX_HTTP_POST_READ_PHASE阶段  375, T$ I6 y+ y  U) U+ P
    / J! d; L5 }- r
    10.6.3 NGX_HTTP_SERVER_REWRITE_PHASE阶段  378
    $ m; _& `1 R+ T) d
    7 |5 u* C4 {! e" Y  y9 ?/ Q3 q- E10.6.4 NGX_HTTP_FIND_CONFIG_PHASE阶段  378
    & n* c. T2 c/ H, y) f. `& S7 V# z! c5 p# ?; }
    10.6.5 NGX_HTTP_REWRITE_PHASE阶段  378: W: q9 p3 g+ L5 {

    + S0 t& k* x+ z7 k- a$ B( ?0 U/ ?10.6.6 NGX_HTTP_POST_REWRITE_PHASE阶段  3799 h; j% X# n( K: d, _2 U' u

    8 }# c' p9 t4 ?% G/ i  F10.6.7 NGX_HTTP_PREACCESS_PHASE阶段  379
    $ K9 A2 A5 @! q0 t! E4 ~( F0 C+ [# U4 D2 v9 e! a
    10.6.8 NGX_HTTP_ACCESS_PHASE阶段  379
    , q/ B8 ~; O3 Q1 v# }  }1 A
    # u$ _( L" ~1 A% Q4 B- Z10.6.9 NGX_HTTP_POST_ACCESS_PHASE阶段  380
    9 G6 f, P" q4 d
    2 u5 `/ p/ _5 @5 |0 h; M  B$ F10.6.10 NGX_HTTP_TRY_FILES_PHASE阶段  3809 b* M9 ^9 M+ Z& @9 g8 j
    5 S+ ^, g- ~2 s6 F0 y
    10.6.11 NGX_HTTP_CONTENT_PHASE阶段  380& s" ~2 M0 N5 t/ W: m

    & y! D+ J2 t' V  g6 g10.6.12 NGX_HTTP_LOG_PHASE阶段  382
    * `  `- t. L+ `5 m- |! ]) N! J, L3 `% A8 T& C  W6 O
    10.7 HTTP框架的初始化流程  382$ J/ L. D6 ?$ F8 B
    # s8 L, i- d% u
    10.8 小结  384
    9 w5 Q9 f+ u/ t- ?" l2 X6 e1 `% v
    # E' ], e0 I) W第11章 HTTP框架的执行流程  385
    1 M1 R( J0 A# q( ~: ^# b$ v2 d, Q" s( T
    11.1 HTTP框架执行流程概述  386  H  g. ^+ z0 Y0 w6 T% G

    3 R4 C( Z6 J, _* }4 Z9 w9 _11.2 新连接建立时的行为 387& [8 v8 k' l( Z" y% S$ N
    ; M( O) V3 s9 U
    11.3 第一次可读事件的处理 3883 M9 v7 e8 z5 e$ H
    1 |( a; ~% C  s  m& E
    11.4 接收HTTP请求行  394
    ; E  H: O  @+ s  z
    8 \  D6 x8 J- |! U11.5 接收HTTP头部  398
    4 l" N- B4 K( t* e$ h, K- L! s. U  Z- I' ?6 J5 `* P" r
    11.6 处理HTTP请求  4004 ^# k4 {" @" t  n7 E

    6 R  \. c" D5 W: N- ]11.6.1 ngx_http_core_generic_phase  406& I5 Z/ k0 s( J7 c9 y6 d4 u

    + m- D( k% ~2 ^9 M% q11.6.2 ngx_http_core_rewrite_phase  408
    % z+ }/ J5 {9 a1 ?* J. _0 `1 C
    & D0 x4 s8 O0 O3 s4 b$ Q$ B& x11.6.3 ngx_http_core_access_phase  409
    % v; e4 d: w* p/ m5 a6 B( }6 N+ P  k$ o. Y
    11.6.4 ngx_http_core_content_phase  412
    7 ^; E- V0 ^9 \4 M$ W% S8 `) @/ h2 G% g% {
    11.7 subrequest与post请求  415* t- I# p# A1 ^

    ; F$ Z- @1 z: ^* P9 D3 d11.8 处理HTTP包体  417. Q$ K5 }- q& U* G0 K. u& L" c7 B

    ! B/ L' }: }- r+ `, H) m- ?) g11.8.1 接收包体  419
    % f$ l' \* e, s* s  x$ ]% I1 x$ Q) w' \' F+ X, e
    11.8.2 放弃接收包体 425
    ' z, D$ h* w; X
    6 ]4 Z' Q' L3 @9 P2 G* K11.9 发送HTTP响应  429
    % e' N, u$ N) F, P) {
    ) K! h# Z/ O# t# T7 l8 Y. A, i11.9.1 ngx_http_send_header  430
      R7 V  g8 [& h; ?1 d  F4 S( ?& z9 y- |) e
    11.9.2 ngx_http_output_f?ilter  432; p5 F6 K# {4 A* ?' E% l* K1 E& \  {
    ! q. s; |/ H/ A2 Y! e' O$ ~
    11.9.3 ngx_http_writer 435" V$ Q; e- C# ^* `! \; m+ Z
    - M3 g0 N6 X& `
    11.10 结束HTTP请求  437
    % H  O6 K! T4 u$ g! M' p: p
    ) A# P& G# P! y! R6 d% P11.10.1 ngx_http_close_connection  4383 B3 E% T" t7 t% p3 {, L

    8 }; g! A* B: _, t11.10.2 ngx_http_free_request  439; w" x6 B  i5 K/ K5 _
    6 S7 `% `) a" o- r  G
    11.10.3 ngx_http_close_request  440
    . f- e7 ^% {1 m) ~& ]" Y3 E, b5 Z: {6 I
    11.10.4 ngx_http_f?inalize_connection  441
    ! v9 P0 r/ O2 c" a$ u+ j/ P5 i: y6 o3 I% A  z6 L6 H
    11.10.5 ngx_http_terminate_request  4434 w( e" _4 g) c3 u3 w
    & r6 c- _9 D4 L! `9 J% m5 @
    11.10.6 ngx_http_f?inalize_request  4433 k) _" h- b+ X

    ) a+ V$ h6 C3 t2 `) |8 Q9 a11.11 小结  446' i' U# p( T, G# f
    2 R+ G7 I5 V& e8 m" u9 W
    第12章 upstream机制的设计与实现  4472 K' N0 `" e6 o; n) j9 n

    - c6 _& A6 ]' S12.1 upstream机制概述  448
    1 k  J, U3 U% \
    + p& M( L2 Z3 O. P9 X, I12.1.1 设计目的  4480 [$ X; s% d4 s! U
    , s8 k) P) w* r8 a0 {
    12.1.2 ngx_http_upstream_t数据结构的意义  450" Z" @4 y; `  Q  |4 H# j

    2 f6 ~/ ~- X, I$ h8 k: @! J12.1.3 ngx_http_upstream_conf_t配置结构体  453
    7 ]6 Q, g/ U; j9 {8 i' }2 t
    7 H1 Z4 h2 l* _- U5 q1 y- a12.2 启动upstream 4552 o8 L1 h& u# Z) f1 g: k

    2 w* w) V. {4 A3 I6 T12.3 与上游服务器建立连接 4573 N- L2 p2 K5 ?3 Z2 [

    # \% {/ {, P1 [( \" t3 T, b( R: c12.4 发送请求到上游服务器 460" V0 r% h, W+ M! Z

    ( `3 ~7 g  u  s' H" X( b12.5 接收上游服务器的响应头部 4635 @3 @! M" F3 x% m) X

    6 g- {, N) v, G; Z12.5.1 应用层协议的两段划分方式 463
    - f" _# c9 z: s
    * D3 {$ q; p) y/ @1 V& L12.5.2 处理包体的3种方式  4646 m( A: A% a9 M  _" a
    ) Y3 D3 q' K" ^+ J5 B2 |
    12.5.3 接收响应头部的流程 465
    0 }" R5 R$ d6 v# v0 h
      W% ~' W* j  [5 \; r. K' \12.6 不转发响应时的处理流程 469
    - g7 P) ]. _6 N  c3 W/ G6 i9 i6 Z5 t' \
    12.6.1 input_f?ilter方法的设计  469! {- g( n- b  O3 H: p& E
    9 Q9 g( m- f4 |5 U) K
    12.6.2 默认的input_f?ilter方法  470- q# _% k) f% X3 @1 K% B
    ; O( q* z/ y. H/ P" z
    12.6.3 接收包体的流程 4720 g5 Q% Q. s2 R+ m9 C+ ^0 L

    : H0 M* i% t  e2 C+ b$ R: k12.7 以下游网速优先来转发响应 4737 j" }2 Q( b: E. N0 q5 ]8 P
    ) L) w: s" R. m
    12.7.1 转发响应的包头 4740 G* F  e' f( u; B: E/ K$ O7 v
    * @  z2 J$ j8 z6 @' p8 l
    12.7.2 转发响应的包体 477
    1 q) ]) {  X$ ?! Q; _6 G2 t7 K
    1 z" C3 K  X* c  Z2 V12.8 以上游网速优先来转发响应 481
    9 y; H" l5 c/ i$ {7 e; T8 e1 z7 H* _' {3 i1 B
    12.8.1 ngx_event_pipe_t结构体的意义  481
    # _6 |. L  t* w! h1 T! @+ H: X1 ~# {( P) Q# O
    12.8.2 转发响应的包头 485
    % w2 t" N+ m0 g9 C$ I3 ^. S2 d* o+ s
    12.8.3 转发响应的包体 4870 i2 A6 V9 K" k% o  u' m1 E* @
    2 A) G  `9 ^  t" l
    12.8.4 ngx_event_pipe_read_upstream方法  489
    2 w+ n% N2 Q' e0 M: f( l% y) K/ t& q5 p8 i0 @) ^" {
    12.8.5 ngx_event_pipe_write_to_downstream方法  494
    ' [* q! a) Q  [/ Y! @8 A1 e. a
    6 ?8 L) ]8 ?# b1 e2 C9 }12.9 结束upstream请求  496) e4 \2 j; ^- h; Q% @3 |

    - j6 d6 z! B( C/ m12.10 小结  4993 b( J, }6 ~( u) u. T, h/ N
    - E# ^  Y0 s2 R+ L
    第13章 邮件代理模块  500
    ' e$ b' b2 n' J- N2 w8 @& l
    : c- G* d# j; j7 e" }$ b0 L. c( L13.1 邮件代理服务器的功能 5005 ]7 q0 L$ \- {4 @7 i, {' Y1 I! h: s

    0 }2 f& T3 k2 P! T: `2 d13.2 邮件模块的处理框架 503
    : l1 H& V0 R: u6 x3 X3 a8 L# ]9 G% \/ g+ e
    13.2.1 一个请求的8个独立处理阶段  5031 I: k: ~: F  k7 D; {5 a
    * o( |3 W( \9 L3 X6 E' L
    13.2.2 邮件类模块的定义 504( |0 h- Z/ R3 D( {% p! ?2 Q

    # p4 d- R; I3 H- C) q13.2.3 邮件框架的初始化 506; ], G, g  ]9 o# T" _7 G
    ( K* G2 X, g( b! y& e- Z
    13.3 初始化请求  506
    9 Q& M8 v# @4 Y5 \* y
    6 _3 Y1 {* b0 o: E13.3.1 描述邮件请求的ngx_mail_session_t结构体  506
    # I/ n5 X% e7 ?0 R- |. E, \# G. x2 R, I' N  l
    13.3.2 初始化邮件请求的流程 509
      b0 r$ ~  f4 o$ `4 A- u
      p3 k+ K2 ~  n% ]) u% q6 I13.4 接收并解析客户端请求 509- Y) L6 S2 |5 a2 x+ t1 i
    / b8 w- _4 ~7 R+ K3 \: V
    13.5 邮件认证  510% E% U6 Y2 q& e0 a2 A4 Y

    3 Y& P" p2 D9 _0 \: B2 c* Y13.5.1 ngx_mail_auth_http_ctx_t结构体  510
    0 A4 }/ e2 p- ]  Q0 C) B- Z5 d: A$ U5 @
    13.5.2 与认证服务器建立连接 511. h( z2 U- V* ~& ^* g( N
    6 x7 V0 m7 T2 N; T7 [* i" S5 G, O
    13.5.3 发送请求到认证服务器 513
    & ], M. t2 b( M# `3 K6 M; S4 B! r1 c" k3 ^6 B# }
    13.5.4 接收并解析响应 514; F  k' f0 X: ?# U3 `9 G

    3 |) l( \( O6 z& T13.6 与上游邮件服务器间的认证交互 514! z$ ^) J; e( d+ E
    1 L  R' d8 P7 X% q, v- {% i9 x+ N5 \- a
    13.6.1 ngx_mail_proxy_ctx_t结构体  516
    : r; D# h$ r" O: I3 B3 D( C6 o- m+ F* _. T. d* [9 s
    13.6.2 向上游邮件服务器发起连接 5165 S+ s. p9 f4 w5 ]; Y+ \% c

    ( T, ?; z, H2 ]& x7 _5 N% X13.6.3 与邮件服务器认证交互的过程 518& ~6 |# {/ ?( F% s
    & c) J$ F3 Z5 j( V
    13.7 透传上游邮件服务器与客户端间的流 520
    1 o' w! \5 @/ F1 U6 Q5 [; W/ s/ I4 M, V8 T" W- L4 X: h
    13.8 小结  524: T* Z/ W6 n* [( m7 o- e+ A

      K$ D- B; g4 E' a" E. f" c第14章 进程间的通信机制  5256 T3 j. L* R+ ~. l  i; B& r: n+ d

    $ s' |: a5 p+ w, S14.1 概述  525. Z  c7 U2 j+ O

    : `+ f( y6 R1 |" u  h14.2 共享内存  526
    , J6 i5 @$ W, j) @
    5 @8 C4 ?' c  C# l# [14.3 原子操作  530
    , s: n7 Z7 M) O7 j1 v: Q& r2 T
    14.3.1 不支持原子库下的原子操作 530- |9 Q, R! e; \" h2 f; I

    5 N/ p0 ~' A, }1 b! ~$ h0 U14.3.2 x86架构下的原子操作  531( J4 H+ \) P( r; V/ x

    % P/ a- l- S+ p, \0 I( ^; o6 g3 \14.3.3 自旋锁  533: Q" C, P/ ~8 i% v* ^
    ! T7 b* Q# q) c1 V. Z7 C7 G: N
    14.4 Nginx频道  535+ J, ]$ g. w2 @/ K$ u
    7 @' O( G" M- |6 [% h6 `) l+ U; S
    14.5 信号  538
    6 R" s& C6 i6 e  Z# v
    , ]0 U3 B; t$ n9 x# g14.6 信号量  5403 o& I. n* G8 h  B2 E

    5 o2 m5 a  m1 X14.7 文件锁  5410 [$ d" u/ R) a3 Q! b

    % V! U6 ]9 H  _7 c14.8 互斥锁  544$ k' L& D' D/ P- M% W. N9 Z

    : [8 K$ m1 P) H9 ?8 |0 \1 S14.8.1 文件锁实现的ngx_shmtx_t锁  546( Y0 a4 A! _/ b- W+ h" k/ \
    + m' x$ E* @4 i) p7 n7 {
    14.8.2 原子变量实现的ngx_shmtx_t锁  5486 h2 M! U3 S! r/ c% K, n

    ( k" T) i1 a8 i14.9 小结  553
    ( \* x- {$ A0 G) i) z7 {; N$ r
    & e9 V  C9 v) O8 h2 ^" Z第15章 变量  554) x# s' \- m. V9 m/ e# q: z$ M
    / f( `! f- }$ t* E6 r3 H/ a
    15.1 使用内部变量开发模块 555
    $ K3 X7 I3 L: X0 Q) G* x% [6 D# J) C4 ]% D
    15.1.1 定义模块  556
    4 _9 v$ t$ ~3 `/ Q; h( {: p& L
    & z) Z) Q7 {+ @15.1.2 定义http模块加载方式  557+ g! L9 h; `" E9 D6 m5 F
    / z7 G( \) t$ P$ j; S$ [' G
    15.1.3 解析配置中的变量 558
    : d" O9 h% Q" S% q% y/ D8 J# z/ Z$ ]9 s5 y7 j2 Y& h! m
    15.1.4 处理请求  560
    4 z$ O; k! r$ }. |6 n, {! b, |7 d/ i) ?
    15.2 内部变量工作原理 561( w0 {5 q( n2 A9 b: L) g7 y
    " C9 }3 L6 ]" a' i
    15.2.1 何时定义变量 561- F& [  X0 V4 m/ f
    % h8 X( ~: I3 m- d, B8 }) y
    15.2.2 相关数据结构详述 564$ \8 f& k0 D  B
    7 e" _' g6 ^& E* f) @( O. }
    15.2.3 定义变量的方法 572% ~; w: U9 Q" J; k
    9 w% w0 x7 A1 V5 n! v' S0 ]( D
    15.2.4 使用变量的方法 5728 q$ t0 s; N" M, M) |7 t

    ( c/ k3 n* a  z' p0 k8 Y* C) [15.2.5 如何解析变量 5734 h, [: y1 M' C- T$ M  m

    4 H3 k* ~" E# i15.3 定义内部变量  5764 K$ t$ H' R9 |$ s" a% B8 E
    ; M$ _. z& E. c) z
    15.4 外部变量与脚本引擎 577! g5 w9 d9 U& e4 i5 d

    9 X9 B# Y2 p3 L# F5 y7 {6 ^15.4.1 相关数据结构 5787 C/ |; I2 e1 [, [

    * v  U4 N0 S/ I/ V. {, M15.4.2 编译“set”脚本  581" Y. f, |' g* n- m1 e

    7 u7 c" T! H: w$ H15.4.3 脚本执行流程 586% B, U- Q* H  \* F5 A
    6 ]! d$ k! K! Q  B+ m/ k2 e
    15.5 小结  589
    8 D8 v! Z' s0 t. J, v* R/ V6 x9 [) G1 q$ K. Q! n
    第16章 slab共享内存  5908 Y2 R: W( O9 X8 L' v! g

    2 w- O4 b2 D& z: [16.1 操作slab共享内存的方法  590
    * c2 q, t; r0 h! y$ Y% ~% |. [- ^, S
    16.2 使用slab共享内存池的例子  5922 ?5 E* f: K& i1 ]" l
    - e1 C/ E" V# _$ h& ?* d
    16.2.1 共享内存中的数据结构 593/ f6 ~0 g* }; Q4 q& x
    ! f0 Q% t( J- H  g
    16.2.2 操作共享内存中的红黑树与链表 595
    ' T+ o, A0 j& P# L$ g, e
    0 |5 A) y  q) D+ l) A16.2.3 解析配置文件 600
    : L; ~' U' j1 f& Y+ d) w7 h2 \6 s: W6 A9 c% Z# H! o+ {0 L
    16.2.4 定义模块  603
    0 D! h7 F! i) _) B) ]; X1 l9 G) d1 m& q% d3 Q
    16.3 slab内存管理的实现原理  605) I* d9 Z* I# Z+ D2 A

    : J- [* v0 n9 A3 W- b$ x- W16.3.1 内存结构布局 607
    % q9 F+ I  w- P0 J5 {6 d; q
    ; s3 p2 `' d/ E! R+ a3 y16.3.2 分配内存流程 6137 p. k8 s0 l# R( f8 W* v$ k* b
    ( D+ H; l3 O- W+ g( A. s  q
    16.3.3 释放内存流程 617
    " n) E( x( i0 P* Q+ t5 I: v2 |0 d  _0 x9 C# g
    16.3.4 如何使用位操作 619# {; @7 s6 p7 l, ?

    1 ]0 s6 i0 N. w5 s7 o* k0 a" U16.3.5 slab内存池间的管理  624
    . A$ E! \4 @9 |- m( c" P) u1 Z' g0 n% f" |, S
    16.4 小结  624
    ( z5 i/ y. |; }( |1 [$ z8 A
    8 F5 B9 w# C; P

    & q9 I& j" {" j: g$ Y; l& O6 ^. _" M% j5 O3 }

    2 v* |: H: O) d! ?" D百度网盘下载地址链接(百度云):java自学网(javazx.com)深入理解Nginx:模块开发与架构解析(第2版) PDF 高清 电子书 百度云.zip【密码回帖可见】20200802更新
    5 K1 R. H+ ^  W' b/ v# ]/ c
    游客,如果您要查看本帖隐藏内容请回复
    . A$ R: I+ i5 ?, S* {

    7 e: I' j2 U5 g0 m% b( x+ _
    回复

    使用道具 举报

  • 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 释放内存流程 6177 z: O# a2 j6 v
    回复 支持 反对

    使用道具 举报

  • 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-4-19 06:28 , Processed in 0.131487 second(s), 39 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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