java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 36677|回复: 376

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66345

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

    发表于 2016-8-1 14:13:22 | 显示全部楼层 |阅读模式
    java自学网(www.javazx.com)-java论坛,java电子书推荐:《深入理解Nginx:模块开发与架构解析(第2版)》
    9 i$ `$ D9 p9 Q) M% E' Mjava电子书推荐理由:本书包括四大部分:第一部分针对初级读者,介绍Nginx关于获取编译运行的基本知识。第二部分针对中级读者,以一个例子为主线。第三部分针对高级读者,这是本书的重点,彻底解析Nginx架构。第四部分针对中高级读者,以Tengine的开源模块为例。. n- Z" q# ~+ ?" M8 A

    , _" n, S* {3 n! P% l; B
    # K' v+ U3 U! ~) E0 W" h0 K
    作者:陶辉
    5 {* O" Z; k1 a% ?1 X: M3 P出版社:机械工业出版社; w- B8 f( |" t2 z
    出版时间:2016年2月- L4 P  [( h' U4 @) L
    3 @8 w1 z# V3 }4 q

    0 m# l! D8 i1 `' s4 F QQ截图20160801140226.png
    & U, h  R6 G0 k/ c& {3 x- @
    ' M# H  M7 o: C0 K1 u: }6 k
    7 _3 n+ k; {' V' R
    java电子书目录:
    ) d9 w8 p$ O+ a8 i5 u4 e4 Y$ n, J+ ]$ r8 r  I/ {1 S' D" |5 m

    " `9 y" |+ |0 w3 i2 A前 言
    + z7 g9 a) N8 `( s  d  R: S2 j
    * B& x' m- Q9 S9 p5 f5 u; Y) N第一部分 Nginx能帮我们做什么) m3 r2 B  b& d: c: q6 q, J! n+ o
    : r: n. g1 S- L- N
    第1章 研究Nginx前的准备工作  2
    $ u  {( ?; B$ b
    + y, T! @1 s6 _" |( N9 t0 p5 H1.1 Nginx是什么  2
      e7 V2 F, c9 b, r! o8 O9 C$ M/ f2 T9 U
    1.2 为什么选择Nginx  5$ J  k3 c) F. J7 G# p6 H
    ( E; x. D# l4 h) B
    1.3 准备工作  7
    + f7 M9 k, T- n% {
    9 E4 l5 L1 m+ T2 e# W9 |, W1.3.1 Linux操作系统  7$ K+ C: h8 y7 q5 g  d

    1 b# {% n: W1 n1.3.2 使用Nginx的必备软件  7- D' L& @7 }! ^3 m) d( v( Q

    . r. t; }& A+ `1 X$ d/ ^1.3.3 磁盘目录  8
    / Z1 `3 N) l+ n/ B, o
    3 y- O+ d' e# N( B1.3.4 Linux内核参数的优化  9
    - i0 d/ S0 W: z
    + d% p4 C7 _: C. T1.3.5 获取Nginx源码  10
    / v2 W/ n, |; C/ P
    # h" B$ k, X7 S1.4 编译安装Nginx  11
    % X& L) B# {/ z8 {: M0 m3 Z  Z
    ' Q2 K/ e, m4 y$ I! j, p. @1.5 conf?igure详解  11
    # X" k* J$ G. L% X( o4 i
    0 P3 @2 j5 u( ^+ s1.5.1 conf?igure的命令参数  11
    " a* K+ l# o6 k; f
    : A+ w. u/ ?+ F2 r: F8 o; `5 V1.5.2 conf?igure执行流程  18# J( n2 z% c2 o

    ! D4 o, {( f3 N7 q1 @+ G1.5.3 conf?igure生成的文件  21. V2 \% w7 [) j

    * C( M6 {7 E: z5 P+ {1.6 Nginx的命令行控制  23
    0 g% P3 z' ]# g  \" F' h- e
    ; s7 z8 ^5 y! f1 ]1.7 小结  27
    ! ~  W. b% d( ?; u: R- e* d! J0 q6 Q' Y. b$ ]
    第2章 Nginx的配置  28' Z5 C( O4 M/ _! I
    : i- C6 ]1 V/ B$ f
    2.1 运行中的Nginx进程间的关系  28
    . `4 ]( a* z4 n. E
    1 W4 g* A' O( B2.2 Nginx配置的通用语法  31" p( O: l; k1 X# k0 w- I7 g; p9 n

    . V9 h) ^$ t3 `% G: M4 z1 ?. n2.2.1 块配置项  31
    # p! w$ ^# Z* [6 _- y+ f- h( ?' t$ A$ G9 A: t$ g" K$ _
    2.2.2 配置项的语法格式 32- c7 E  b  `% P( M7 t

    5 Q" ~/ x; g: K9 N+ d2.2.3 配置项的注释  33
    # ~6 ~% E3 {0 j2 u7 w1 s3 \
    % L; z3 {8 }2 l' i/ ]4 w, m* ]2.2.4 配置项的单位  33! l5 O) u9 @- i
    " G& @. b. R% S1 N! T& W
    2.2.5 在配置中使用变量 33
    . ^8 W9 I9 \& r
    1 x9 L7 }" h  E6 h4 H7 }4 p; P2.3 Nginx服务的基本配置  34
    . }' g% j0 C( \( ~5 R6 p0 K& g7 b# j/ p( f1 Q# M
    2.3.1 用于调试进程和定位问题的配置项 34
    0 M7 H: W/ b- D% `( u
    ) Z$ j) m. p6 h6 v- I2.3.2 正常运行的配置项 36
    * g; X/ x& h. G$ w# k, q+ h
    , [( Z2 z' x+ I2.3.3 优化性能的配置项 37* R& ]2 M# j) V7 M1 }* p/ A+ |

    % g( Z6 s+ f# f+ @# h9 A+ D5 u2.3.4 事件类配置项  39
    / Z$ {; E& j% n$ e: I7 S, o7 Q2 ~5 U2 F/ M
    2.4 用HTTP核心模块配置一个静态Web服务器  40; Y! C8 k% r; h. [/ C. F0 M' t" C

    1 K, M. s; G, w5 \% C! J3 P2.4.1 虚拟主机与请求的分发 410 N9 d* b+ ^- f+ W) Y7 S* ?

    / _, ~7 o. ?/ d4 i$ T2.4.2 文件路径的定义  45
    9 s- F5 L! W3 G! \& Q: W" u5 z- z3 i9 ]
    2.4.3 内存及磁盘资源的分配 47" V/ t/ e  O! _/ b1 P+ u& q; {
    6 q% Y5 V. H/ J3 n
    2.4.4 网络连接的设置  49# ]: W3 F9 {$ E  k  g

    - u, b" c' A1 Z* [2.4.5 MIME类型的设置  52% P& E0 S# c! O. c3 v

    # j% A/ d: F, j1 y. s2.4.6 对客户端请求的限制 53  n- i. }- P  ]. C7 ^

    4 K# }7 l& ~# U$ L2.4.7 文件操作的优化  54
    6 X2 ]; {, t( v) x/ N) T
    % n9 u; A" C" ~4 h7 P8 ?* i2.4.8 对客户端请求的特殊处理 56
    5 ~/ _* {" V) l- B- |/ _
    % I" E6 X6 E0 n' J6 @- h6 U( C- T2.4.9 ngx_http_core_module模块提供的变量  57' }) a9 }) y; ]: P) V
    5 R( v7 S" e/ y3 F6 t! N
    2.5 用HTTP proxy module配置一个反向代理服务器  59  p1 E4 y- Z  q" E2 G. Y* R  q# B

    3 Q) F! L! s" j! |2.5.1 负载均衡的基本配置 612 J5 ]0 ?( n9 i) l4 Y
    ; i' B1 D; [4 Y/ V' O
    2.5.2 反向代理的基本配置 63$ N. R9 B7 }4 v2 w* d3 d

    " x+ t+ V" @4 D1 Y" m5 S( x2.6 小结  66
    ' V! m! K/ @/ P( ^1 [1 l
      b! J0 z- ]8 V: M: x1 z第二部分 如何编写HTTP模块
    6 @! ]  z% C9 J, _1 f* j! n2 {- ?( b" s) ~% X
    第3章 开发一个简单的HTTP模块  68. i1 Q; c9 a. M1 [% V# Q$ R

    # v4 ^% X' r- d/ v7 N' N3.1 如何调用HTTP模块  68
    / o. ]$ H. w1 n% W5 q8 V9 m( ~8 d( n% K8 Z; E  l7 B3 K5 V
    3.2 准备工作  706 m" W, P* e$ @2 k* {
    . D) W' ?6 S9 X6 j0 {7 f
    3.2.1 整型的封装  71
    : _/ s+ u- {( g
      A. |' w2 x1 B' ?3.2.2 ngx_str_t数据结构  71
    1 X' D* j$ i4 A+ Z- n" m0 `3 n0 h& h! x
    3.2.3 ngx_list_t数据结构  71
    2 p0 N. B1 E0 x
    $ \" n3 ~# f, \( e( d" b0 f% l3.2.4 ngx_table_elt_t数据结构  75
    3 w  C( K1 u. G  q! g5 H9 }
    * u8 n: C/ a& X0 C3.2.5 ngx_buf_t数据结构  75
    ; A9 T9 B+ h% s! _4 ]
    $ y; [$ i/ y* ^- S9 e) t3.2.6 ngx_chain_t数据结构  77
    8 q- s3 y) v. s) t  I- w- Z: R2 ]1 j) L; l7 R
    3.3 如何将自己的HTTP模块编译进Nginx  77) e2 ^' g; _9 v& `

    ; V+ r+ W* b9 q/ d/ Y% P7 X4 ^3.3.1 conf?ig文件的写法  77
    4 P, C: e/ |. t$ x& f8 t' E5 F6 d! k' I( M) Y" q0 S) u. b
    3.3.2 利用conf?igure脚本将定制的模块加入到Nginx中  78( g+ r0 g9 f/ ^8 E. `

    ' C9 v0 M. o3 d) ^8 g3.3.3 直接修改Makef?ile文件  81
      ]1 L! {) i# B) F
    & U# b/ A  U3 m4 v3 h- i3.4 HTTP模块的数据结构  82
    & C% _. k) c$ q8 J3 n$ B! T% v# {# j
    3.5 定义自己的HTTP模块  86- x8 F! k: W% f* h3 k" W
    - ^% H5 G% P/ W% O
    3.6 处理用户请求  89# i4 y7 [( f3 `8 A% N; U

    + ~% v/ d& J  ~4 I3.6.1 处理方法的返回值 893 h9 }& a0 I3 q% R" `5 Q

    7 x. p% e. ?) j- W& b- N3.6.2 获取URI和参数  92. o* b6 c4 T& j/ g* y4 Y: A6 J

    : u" T7 P& V: F5 b/ K8 U# G( N0 @1 ~0 c3.6.3 获取HTTP头部  94
    9 @$ _( j: E( F7 T* L% W: h4 N0 G# R1 s1 ?8 C
    3.6.4 获取HTTP包体  97; I1 ~4 j) A+ p: L. I& r. s
    ) J. |. e3 P) b  O3 h0 N& w3 U6 }1 ?
    3.7 发送响应  990 e& _. y( e9 Y; r+ f

    " P% r- E! H: \4 i; ]3 W: L& B3.7.1 发送HTTP头部  99& |& T. q4 b# w
    + \& J6 H. }, D1 a
    3.7.2 将内存中的字符串作为包体发送 101
    & J7 w, g% L0 [" r0 ^$ M( V+ t" ?5 ^; o/ Q
    3.7.3 经典的“Hello World”示例  102! s7 P( m" {0 e& ^

    4 W- n! w7 ~0 r& M$ y+ N2 s) ~. s3.8 将磁盘文件作为包体发送 1036 C. u2 s5 ?' f& ]
    3 ]1 ], w- g% m- |- w9 T2 A' I2 [3 a
    3.8.1 如何发送磁盘中的文件 104
    % |  @! n. x3 E9 G) j7 O2 X4 q4 d) V0 ?
    3.8.2 清理文件句柄  106% e( f4 W1 W# I6 @
    # c; M* r" g7 c- W. I8 @6 m0 u- u
    3.8.3 支持用户多线程下载和断点续传 107# C  x# Z+ d1 B6 z9 i( G! p# [1 F

    + N7 i( T7 s% P( Y. j8 _3 D3.9 用C 语言编写HTTP模块  108
    8 b. A5 X) z  l# H* F" p
    4 P+ R" g' b( `1 G4 V0 H3.9.1 编译方式的修改  108
    ) J( {% B3 G& a* H. _: B
    6 m6 M! ~" D. v) J3.9.2 程序中的符号转换 1098 p9 \" u8 q! ~& R% R5 N. _
    ) d) E0 O  X+ \3 g3 }
    3.10 小结  110
    - V$ t; T- Y+ j8 O) Z/ r, _; W/ @4 j: `% W2 ?# i+ G) k* A* A
    第4章 配置、error日志和请求上下文  111
    ( w$ B8 V5 ]' m
    + ~- C& K+ \8 C8 Y0 Y4.1 http配置项的使用场景  111
    # Y8 }3 U" t3 r1 h" H
    3 R1 _4 @; y5 M$ s4.2 怎样使用http配置  113# c% H! A& u. `$ [. n5 b/ C) J( n

    . X; B& v9 z& c7 l: N' v+ E4.2.1 分配用于保存配置参数的数据结构 113
      L9 {! j) z- o0 X
    1 R' F$ ]* I0 J- R: G: X7 K/ E4.2.2 设定配置项的解析方式 115
    " ], f) ~, C. Q4 H1 s. S* X+ V  S' K, L- A
    4.2.3 使用14种预设方法解析配置项  121
    ! `0 l' h; w" u; B1 F% u7 ]
    / D; b9 o& c) x0 W$ |4.2.4 自定义配置项处理方法 131
    % H) ~) C) Z8 f, k" I/ L) f6 r1 [5 a6 {: t6 r
    4.2.5 合并配置项  133- C% h% X+ b/ g3 y( S

    / N: @: U' W, s4.3 HTTP配置模型  1356 F; g! f6 n/ z4 u; n; R7 k5 y$ c1 [
    ) t) V, L3 q+ Q; d4 z8 c& U
    4.3.1 解析HTTP配置的流程  1360 B9 L5 }" v$ W! S: k4 k0 H# G$ D2 U

    5 X/ Z: E6 P+ I. }* _9 F( D: o0 }4.3.2 HTTP配置模型的内存布局  1398 `" ?+ x& U) |3 r1 Z+ S3 V/ X6 e

    1 h  j/ `( y/ B/ v4.3.3 如何合并配置项 142' E* ~  \7 l. d* j
    4 H& m$ e+ U% I
    4.3.4 预设配置项处理方法的工作原理 144
    $ |9 {# C9 J8 z* m1 F: |( o. C' U* t
    4.4 error日志的用法  1459 t# C4 O1 ?/ g$ t% c" l+ m

    # Y! {9 E# A9 @" W9 {4.5 请求的上下文  149) _* w4 b- m) W) |

    - {+ r# f' q6 w1 n3 s4 V" i& y4.5.1 上下文与全异步Web服务器的关系  149
    3 }* b( }  q# o4 i4 O5 u1 w2 l+ v" ~5 [3 {5 |' X
    4.5.2 如何使用HTTP上下文  151/ L+ f! w3 {1 w# I5 U

    8 X0 D2 c/ n+ V$ k/ B4.5.3 HTTP框架如何维护上下文结构  152% k# a, Q8 q/ c( H$ Y

    8 c3 Q. w2 c6 |4.6 小结  153
    & a( k4 {6 P3 V9 x) q. f3 G  Q, w& p4 T# j% n, i! p8 _8 j
    第5章 访问第三方服务  154' v  ~" i5 s! j4 ~( T" V( T
    8 G3 r. B" j8 |: z0 ^0 Q) c& s: e1 q
    5.1 upstream的使用方式  155& [" B9 ^6 v" J

    % C" |6 X. n& Q: \. U5.1.1 ngx_http_upstream_t结构体  158
    5 h1 O/ m3 w- l0 e( g8 ~0 Q& x( g0 k4 _9 }; m. H- U3 o- p
    5.1.2 设置upstream的限制性参数  1595 s/ A4 k9 q2 e4 X: G" \( Q( |: H
    : |/ Z$ o" y2 N* i1 |3 T! |
    5.1.3 设置需要访问的第三方服务器地址 160
    9 u$ T' M  X5 |# I0 D- S6 w# q, s* O1 t# V  J9 c; |
    5.1.4 设置回调方法  1616 D  b  x- t3 y% m1 K$ n

    * o4 Q7 L, o0 c/ A5.1.5 如何启动upstream机制  161+ r, }+ U" O2 E$ F3 @! `

    ! Q; Z4 f- A( A- d$ O: o1 L5 f5.2 回调方法的执行场景 162
    ( v6 |+ |0 P* t8 T1 O4 _- h
    / J. j9 S0 q* _5 E7 ~" o5.2.1 create_request回调方法  1621 C% E9 i& x2 l- p) V2 l

    0 k# e. @/ U# C" ]6 x6 w. b5.2.2 reinit_request回调方法  164
    " w5 B+ ?9 w( K/ V$ t4 ~
    5 K9 y; w2 k0 K# [* R/ m$ O& X# }5.2.3 f?inalize_request回调方法  165
    ; D( a; f' P( ^7 y
    * ~+ p, p0 A, \- z# J4 U8 d7 p' a  @5.2.4 process_header回调方法  1658 F+ [8 J' h& M7 d3 \4 \8 x+ b* O

    . A6 Q/ u* P/ E. O3 f5.2.5 rewrite_redirect回调方法  167
    ( N( _# z7 d7 q( I/ H6 O2 [
    & P! _' ]: J* `) Z9 V( D6 }4 h5.2.6 input_f?ilter_init与input_f?ilter回调方法  167$ N0 \# [2 S  V8 u  M4 U: k

    0 j+ G+ n& j' V: T% L5.3 使用upstream的示例  168
    ; w/ d, L  N9 q, {4 ~5 a1 U3 B% ^- @! M# d1 u+ C8 H
    5.3.1 upstream的各种配置参数  168' Q* n9 a/ t6 D6 {* E# {
    * @& ?& ]# P9 n
    5.3.2 请求上下文  170
    ( K* C. r! @) D0 R0 t  ~, H- K5 U1 @2 {
    5.3.3 在create_request方法中构造请求  1708 s+ Q" D, w, T+ s5 C4 g  V8 a
    0 N$ Y9 J/ |; _  r; ?6 J& L  G
    5.3.4 在process_header方法中解析包头  171# F5 u% k9 j2 e" A; |

    & C+ k- F. x! l! |5.3.5 在f?inalize_request方法中释放资源  175
    + A1 ~3 {1 u3 `; D7 e* Z# n' Y- q$ q% T" @, W0 ?
    5.3.6 在ngx_http_mytest_handler方法中启动upstream  175
    2 V9 D5 I' j, f8 O% ?  L
    6 h6 D+ }7 |" w3 h" ?. P5.4 subrequest的使用方式  1777 u0 I- z9 o7 l: f0 Y" m
    ! x3 c3 D/ G; {2 d+ v
    5.4.1 配置子请求的处理方式 177
    + J  `6 j  @0 T& f1 h6 E; @/ O( I& H. Z1 P$ e. q; y
    5.4.2 实现子请求处理完毕时的回调方法 178
    6 V# j8 z# q4 Q- ~2 @7 F; g
    ) V9 f' z4 @4 |5.4.3 处理父请求被重新激活后的回调方法 179* S+ P6 u3 Z3 p; w9 l. t
    % {- F0 h% T6 c5 ]& r
    5.4.4 启动subrequest子请求  1795 e( L6 T8 x6 |+ q2 T
    4 C$ D( ?" \  t$ j8 b
    5.5 subrequest执行过程中的主要场景  1807 r2 N/ O- e$ e) D- e

    1 x9 |0 T1 a: y& a5.5.1 如何启动subrequest 180( m+ X+ c4 i  a; ?: ]! F

    ' |* f0 c! Y1 N, m7 k5.5.2 如何转发多个子请求的响应包体 182
    2 C; e1 b! x2 a+ X
    1 Z, b) t0 d. F- i5.5.3 子请求如何激活父请求 185
    " j2 n  ^3 ~) D
    # `/ _* ]  t  M  I5.6 subrequest使用的例子  187/ ?& v/ P! W5 y4 u, I; U5 N5 n- g
      M' C% j  B6 Q. l, k& d' w
    5.6.1 配置文件中子请求的设置 1879 k5 k. p. z) H7 `
    ; M- T: T* D, |, M0 s2 Y. K2 F+ k5 [' W
    5.6.2 请求上下文  188
    9 `4 d4 V  p0 M( x$ {5 X+ a/ e" R: X- X
    5.6.3 子请求结束时的处理方法 188
    % q. V5 c7 e+ @$ }5 C
    - G. e0 b( ~# F5.6.4 父请求的回调方法 189) d" ^# g0 w- a9 m( j

    . u, R# D' k" j, t* |) T) P5.6.5 启动subrequest 190
    - X( F9 ?' a, A; x
    2 |1 ?2 j1 q4 h0 x5.7 小结  191+ z$ D" u" f( y: P
    2 j) z# _7 k, I& ]
    第6章 开发一个简单的HTTP过滤模块  192
    1 U! c) h7 m  ?( B
    , ]7 `* K% m. _- i* D0 f6.1 过滤模块的意义  192! r) Z, e0 b2 A' v: @! G

    0 H+ _3 m- x" Z9 Y0 l+ R1 {6.2 过滤模块的调用顺序 1934 y' ~9 {3 K/ S# n* _0 z7 m
    ; W- u/ |3 K; @. m
    6.2.1 过滤链表是如何构成的 1940 M$ {* L. u& b* F" G  w

    7 m  ?0 R" X: T0 h  c6.2.2 过滤链表的顺序 196& I4 E7 r$ t/ ~$ K6 i8 e  r
    - X4 K3 ^$ M: ]8 \
    6.2.3 官方默认HTTP过滤模块的功能简介  1977 K2 W% P# N1 n+ |
    0 g4 |) F" B' C' r
    6.3 HTTP过滤模块的开发步骤  198
    $ g' g0 B; b; n0 ^3 F# v8 M
    8 }+ r  [/ A( W  }$ H' O! V, t6.4 HTTP过滤模块的简单例子  200
    0 O( |& S, `* w4 M; i# H9 r9 Q1 k7 S: ~: a, r( g. r4 v
    6.4.1 如何编写conf?ig文件  201: j9 f, `& h  o' s4 f5 }
    , ]# X1 {- J  ]9 N' C. G9 i2 D/ Y
    6.4.2 配置项和上下文 201. e/ s; Y* Z2 ~$ G% k; l1 o( t

    ; L5 u$ n. ?, u! h6 P  K6.4.3 定义HTTP过滤模块  203) M3 e1 L- k6 P  @  Z
    5 h$ U8 q5 q; J" o# f  v
    6.4.4 初始化HTTP过滤模块  2046 J' ~) T& p/ K! d! P* a1 Y% z

      q+ ^. j" i  ?$ [  j' a6.4.5 处理请求中的HTTP头部  204  a* z+ p0 {+ A9 ?9 L) J4 i+ X  F0 `
    " }3 z- w6 R0 }9 J  u8 ?
    6.4.6 处理请求中的HTTP包体  206/ U$ V. p0 l8 r% V
    5 y% Z) o# E' @- @9 Z+ D
    6.5 小结  206
    2 \1 D! a% w. m- |% |7 ?' M( ^, k5 _' ~" u/ p* C7 N/ t* i
    第7章 Nginx提供的高级数据结构  207
    5 o* r5 @5 O$ y1 b8 o& ~
    $ ?! q3 Z& B6 y* X6 m7.1 Nginx提供的高级数据结构概述  207" ^: u. h5 Y# f$ M* \
    3 Q* Y' G; }' K( C$ N/ k  k
    7.2 ngx_queue_t双向链表  209
    4 p/ w0 [2 m4 I9 v" K& Q: ?7 Y2 w8 K0 b  A8 \
    7.2.1 为什么设计ngx_queue_t双向链表  209
    ' g* h1 u3 V$ N! w3 ?7 m
    $ K# t( M4 X1 [( O5 Z7.2.2 双向链表的使用方法 2099 e7 ]- |+ t, d% z; x/ G, s
    3 z( y5 D% ~! l  s
    7.2.3 使用双向链表排序的例子 212
    % R: Z$ y0 L: m' {# K; R7 q# \, [* E0 w* j
    7.2.4 双向链表是如何实现的 213
    ( l! S1 b: {7 }2 j6 h* M' ~6 N( n7 U
    7.3 ngx_array_t动态数组  215
    $ I, ]6 U9 o0 t, z0 K( g
    9 y$ X" t7 [6 @, ~7 m7.3.1 为什么设计ngx_array_t动态数组  215" c, Q2 G& O4 U1 A& T

    ! Y# K3 j3 ^( ], ^* b7.3.2 动态数组的使用方法 215
    $ j/ W8 u2 K0 T% g# r: W* H5 \1 q  R" F) r, q4 G5 s# c- W
    7.3.3  使用动态数组的例子 217
    ; U% F) Z2 x* l) u* l1 T
      r4 z4 S7 C  C( o! T7.3.4 动态数组的扩容方式 218
      _. V9 g; J/ X& {" V. b1 }  T, z8 i6 m  O# {
    7.4 ngx_list_t单向链表  219$ {: Y9 H# o' l6 a7 K
    2 A! w4 Q7 s, z" \( T
    7.5 ngx_rbtree_t红黑树  2191 z0 u9 `9 b4 u- T; ^. N8 v
    7 U5 |" c- J* p3 o0 g; R) t
    7.5.1 为什么设计ngx_rbtree_t红黑树  2198 A& c, u& C6 H/ U+ G. n

    ) L# J+ u1 L% K0 ~* M7.5.2 红黑树的特性  220
    / x& [  v8 W! F$ {0 ?5 j2 Y  N" F8 I
    7.5.3 红黑树的使用方法 222
    1 @! N1 m. o/ }: ~6 q
    - a  e0 b; k  q5 `) q$ X  m7.5.4 使用红黑树的简单例子 225
      s0 b9 e6 h; Q. s
    ; V6 s% _/ Q1 b5 g( L$ Z. a( i& y7.5.5 如何自定义添加成员方法 226
    1 |& V  t( n- o5 R6 i( I7 f* A2 v" H& L; ]; j8 Y2 z
    7.6 ngx_radix_tree_t基数树  228
    3 H2 I5 b3 B1 M/ f4 w; `! F" x& l7 k' Y* J4 B8 n; E8 E
    7.6.1 ngx_radix_tree_t基数树的原理  228
    9 |/ o5 k+ r3 |/ `. G: P* h3 b9 e* [8 q8 v% a
    7.6.2 基数树的使用方法 230
    7 S# N! w1 A( W0 s$ l- U5 H$ Q) {* Q3 O* F4 K6 ]
    7.6.3 使用基数树的例子 231$ k1 U- g" U7 f( |
    ) n& k, b" K8 g' t% X: s  }, C
    7.7 支持通配符的散列表 232
    ; N) d2 N/ V1 y, F
      K6 D/ F1 ^& U! U/ U3 \1 q& y7.7.1 ngx_hash_t基本散列表  232
    , L; S6 @) }! Q0 T/ d8 X- Z/ b, c3 @+ a5 ^
    7.7.2 支持通配符的散列表 235& J( I+ }4 [6 L5 @4 K6 T$ p" S( H
    $ G) I; \* r) [; c
    7.7.3 带通配符散列表的使用例子 241
    6 \; g: A& x/ Z* }  |
    6 D; O6 N9 b8 x$ W2 s. A/ K7.8 小结  245
    % |9 Z3 o: Q* f- _$ n0 H; {4 }) v+ z5 M8 K% `
    第三部分 深入Nginx1 @# D6 d( H  d/ i
    8 K. s* o3 @1 ]4 x0 @; ?7 g
    第8章 Nginx基础架构  248! V$ ^2 p2 [. y* r

      X. k/ R% F/ z! A( ~8.1 Web服务器设计中的关键约束  2494 d& {# ^+ j  a; s* l

    + I0 Z; A" h4 h, a/ d8.2 Nginx的架构设计  251
    & H4 C5 l/ O6 w
    5 {1 P% |- ?, q4 M2 Y: A: l0 h9 o8.2.1 优秀的模块化设计 2519 E7 r. ]3 ^: u9 b0 f1 Q" |

    * {( W7 I* ?" {9 P8.2.2 事件驱动架构  2548 T) w: [. k* B" E, f. l" ?

    9 g% r1 |2 o: @2 Q8 E0 O8.2.3 请求的多阶段异步处理 256) f( M0 O% P1 w! H8 L! T
    4 }2 O  O; c1 w1 R, a
    8.2.4 管理进程、多工作进程设计 259
    3 |) X; N% J2 R" _1 n6 e6 m' N7 r: ?
    8.2.5 平台无关的代码实现 259
    / E/ R! s6 z3 ]9 U, x3 X/ R
    3 }4 U6 y8 @+ [% k( P8.2.6 内存池的设计  259
    * A8 q9 C1 h, O9 ]# U1 E1 }: d8 @
    " L9 V4 I1 u3 t  V, l$ i8.2.7 使用统一管道过滤器模式的HTTP过滤模块  260; x0 _0 j; C; a3 Y) q9 ^7 q, d, r

    - D% z9 n3 C) N: Q' l8.2.8 其他一些用户模块 260, b/ W- Y; z: s  Q0 `  l

    2 A; C1 H! ^- }5 [) s: n2 Z, o8.3 Nginx框架中的核心结构体ngx_cycle_t  260( g/ [7 c% Q0 ]- T  j

    7 b4 w( D  \% x( P: s. W8.3.1 ngx_listening_t结构体  261! q) i7 P/ P' f9 t" r! l( D4 O

    - d& f7 c6 ?7 {  @  M8.3.2 ngx_cycle_t结构体  262
    $ @. A" ]& [$ s6 j" [/ V. b8 [9 ^9 X! C9 e$ v+ U: X
    8.3.3 ngx_cycle_t支持的方法  2644 q+ {$ `; D. I8 t* v% f1 j. j

    1 y( D* ?* [  T) e. v8.4 Nginx启动时框架的处理流程  2664 _8 ?' F; u/ C% M4 @! \! K+ Q8 i6 N
    7 w, U, D2 o) ]
    8.5 worker进程是如何工作的  2698 P" B' [( i  v5 K0 i8 e8 ~
    ) X$ L" J! a! G  x: l! x
    8.6 master进程是如何工作的  271
    / L2 p9 f8 Q- v1 m0 q7 Z5 ?& r8 b
    / n3 {  @4 u0 _( E- K8.7 ngx_pool_t内存池  276
    2 j! N; @: e. c6 \4 G& q) a: x8 h* x! T' n$ K" s2 u2 m, ~
    8.8 小结  284/ L, U# e0 p5 t8 b( ]0 ~

    ! }% h- y7 b% d' E' o# J/ ~6 B第9章 事件模块  285
    ( ~' P+ u0 Z" d- H4 `; Q* G3 K3 L3 a# \: i$ P2 ]
    9.1 事件处理框架概述  2867 ]: e  s; J1 r' Y9 }  h( E! f
    % r* t+ R$ d1 B* h3 ]7 v
    9.2 Nginx事件的定义  288; W6 F( `7 }) ~9 z% }6 j
    " S9 S* X6 h* s9 g4 @
    9.3 Nginx连接的定义  2910 B2 P0 Y. x* M2 o* e

    4 r1 N; j+ V& r- A2 c9.3.1 被动连接  292
    * p7 ?( B; T  X( p, p& A; q5 l8 g; p! v, Q' K0 I4 g
    9.3.2 主动连接  2956 h" `. z0 I$ u! G3 Y( N

    2 ?5 `/ u2 s% t9.3.3 ngx_connection_t连接池  296; \% i$ ~2 b, g
    / J3 J1 P1 o. B
    9.4 ngx_events_module核心模块  2977 p2 T( F5 Z0 `' k0 |' |4 v) [- |
    , C- X" V2 y/ a. _. ?; L' X
    9.4.1 如何管理所有事件模块的配置项 299
    & W0 X4 z3 E3 z9 ]! x2 _8 i; j0 z' G3 Q) S  U7 M6 v
    9.4.2 管理事件模块  300
    5 K& P# Q, k2 s* a! p) E1 ?, }" w* |) ]1 Y
    9.5 ngx_event_core_module事件模块  302
    % A# o8 F  |2 w* Y; M; ~  b; O1 Z6 H" F, P3 ^& K7 K5 V
    9.6 epoll事件驱动模块  308* d! H$ k& o! a! _" t" z: ]
    / o; i6 g9 R2 D! R& _/ {+ c$ [3 _7 \
    9.6.1 epoll的原理和用法  308
    $ ^3 V1 n! r0 z# G0 u& t+ p7 ~1 t1 X3 U  [
    9.6.2 如何使用epoll 310
    * t! {+ M% J2 v
      p6 R% X) r& i  T" @3 s9.6.3 ngx_epoll_module模块的实现  312, P) [1 e# j" i0 [# d

    & i$ W& b/ X7 C9.7 定时器事件  320' w5 Q3 C0 ?+ g$ C
      Q( I( W, y, E9 z. J; [
    9.7.1 缓存时间的管理 320
    4 r( C, [0 f  ]" _
    + x& E7 v! v/ \) g5 I/ Q$ v; t9.7.2 缓存时间的精度 3231 M+ z% W4 s* t( m* E- A5 G6 D- j
    , g9 c  g! y% w$ ~* K/ @. A
    9.7.3 定时器的实现  323
    3 h  @! i4 w9 q5 V' @7 c  {$ S$ P
    * D$ a4 k  p0 q9.8 事件驱动框架的处理流程 324
    6 j' P* J) j% T: v
    . {% r8 V1 `% V9.8.1 如何建立新连接 3257 K; I7 K6 N' q3 _  v

    5 k& [  ?: ]2 l% }  R( ?9.8.2 如何解决“惊群”问题 327# I3 B: J- ?  h3 b- j& B
    1 B$ }( W/ x  ^3 E
    9.8.3 如何实现负载均衡 329
    ) E" p) f# H6 i" Y, ^- l4 |9 X$ t3 C+ u$ ~8 E" P6 A7 q
    9.8.4 post事件队列  330
    ( V: M4 c5 e; t  H2 K9 e' m& l5 e$ s2 e1 m
    9.8.5 ngx_process_events_and_timers流程  331# ]8 m% p0 d; Y  m$ }/ @! \3 A
    , k& w4 s( _0 a0 ]
    9.9 文件的异步I/O  334
    * N% ]) c. T5 {1 K
    2 I9 a7 {% ]' p- r& h9.9.1 Linux内核提供的文件异步I/O  335
    9 {4 @! Y0 L' M0 P6 |" E" y$ l) P; U$ s/ v. \: G  f, t
    9.9.2 ngx_epoll_module模块中实现的针对文件的异步I/O  3376 d; Z& m* y9 t) s# N1 }3 {
    3 t6 @9 M/ o, D% u. f
    9.10 TCP协议与Nginx  342
    * |9 _: v. ~7 U* a; ]
    , j. W7 z5 h- w& K9.11 小结  347
    ( K( i1 s, g# W$ @
    : Q3 v0 }. B. l4 j) I% z- o/ k, V第10章 HTTP框架的初始化  348
    2 B: z) s) t5 P; z
    5 M; l: F5 ]8 f( R/ S3 \+ @: I10.1 HTTP框架概述  349
    : i! q+ k+ c$ ?' W7 {9 B* S$ `  n+ b& |, ^3 N, A# h
    10.2 管理HTTP模块的配置项  352. b2 `$ b& f: ~6 g

    ! A! A7 o0 v% H2 K0 u# m10.2.1 管理main级别下的配置项  353
    9 `. @1 T) {% l! I1 p, {. @; p8 I! d1 }
    10.2.2 管理server级别下的配置项  3556 J1 P: f0 s7 S: N! W
    7 Y0 P0 f- v6 O. W4 ^( i
    10.2.3 管理location级别下的配置项  358/ m/ b" i5 X8 q$ g8 |
    * ?% n- d" [8 }5 u9 l
    10.2.4 不同级别配置项的合并 364- O0 h# Q& Z+ u, J# d' F
      r$ w- P2 r+ \# a! q$ x
    10.3 监听端口的管理  367* G2 s+ j8 W0 j# u' B4 R2 S) u

    6 ?+ e8 K0 \1 s/ a/ m. y7 E10.4 server的快速检索  3700 a5 d5 B+ a8 Z% Q3 I" P

    3 M9 l# V2 ~( E10.5 location的快速检索  370
    * m! F- [; o8 s9 Z, \& `
    ' R8 X) U- o* A  I10.6 HTTP请求的11个处理阶段  372
    3 D( r$ O# P2 F7 U& @/ R4 s/ t6 E( j. O; j4 v  J( [9 I
    10.6.1 HTTP处理阶段的普适规则  374/ x/ S5 f! B4 w

    1 o% r& v& A# B. O+ X10.6.2 NGX_HTTP_POST_READ_PHASE阶段  375
    ; c6 a7 Z3 R% R3 D/ W  L: L$ x: K2 X+ ^# w
    10.6.3 NGX_HTTP_SERVER_REWRITE_PHASE阶段  3782 p& s3 d# G9 X% K& M3 b
    ( o* R7 W4 p) D  n! E  I
    10.6.4 NGX_HTTP_FIND_CONFIG_PHASE阶段  378
    0 V' j# j7 A5 Q
    ; {6 D- B) ^/ r: |$ X9 W1 v6 c10.6.5 NGX_HTTP_REWRITE_PHASE阶段  378
    1 a; B! R$ c9 i$ O, h
    ' ]% N4 u+ P0 z% Z( z5 _# F* d" C10.6.6 NGX_HTTP_POST_REWRITE_PHASE阶段  379% X0 j: p% {) s! _, Q
    / L, k' I+ W% ]% }: d
    10.6.7 NGX_HTTP_PREACCESS_PHASE阶段  3792 E  M+ @( t1 B" N' M) J: G5 _

    . K! y3 u# |- N: C* M6 f10.6.8 NGX_HTTP_ACCESS_PHASE阶段  379- s9 d( b7 `* m7 n( E2 J/ o
    1 L3 W7 F8 x/ K9 K
    10.6.9 NGX_HTTP_POST_ACCESS_PHASE阶段  380
    6 a7 U6 w5 s9 |$ e5 [# M9 N4 i* t1 d) u6 I3 T5 ~
    10.6.10 NGX_HTTP_TRY_FILES_PHASE阶段  380
    * ^' r7 p8 y4 Z% x3 l* G9 m7 @/ N$ U, Y( w) y) s% J3 Z
    10.6.11 NGX_HTTP_CONTENT_PHASE阶段  3803 P3 c) f  w; d+ \; r' }

    8 l9 i8 @& N% Y4 L4 F; M( P10.6.12 NGX_HTTP_LOG_PHASE阶段  382
    & l# V8 s; u  Y
      `% Z( n- E" W# |10.7 HTTP框架的初始化流程  382! y" m7 }, ^- `
    7 D$ g8 [  j# [4 r) r' }: S
    10.8 小结  384
    0 R! f( W) J7 ]9 x, v6 O# R
    ) E6 l' X. ^9 L6 L第11章 HTTP框架的执行流程  385
    + C- F. U2 z0 E9 K/ }: y/ P- I
    % k4 f) `# h0 D) e& ^6 ^/ i( l11.1 HTTP框架执行流程概述  386
    $ e  m4 F. q( g& \- P( q2 I+ I; F3 A
    11.2 新连接建立时的行为 387* v& l4 D$ Q2 g
    8 o% w) M; T# \3 M
    11.3 第一次可读事件的处理 388
    ) W# V1 F7 n5 S2 X. x# p3 L7 ~! j( N
    11.4 接收HTTP请求行  394& U* E7 e+ e: T: p. b0 {

    2 R5 Q$ w" ?" ]+ v4 d. s- D9 C& F11.5 接收HTTP头部  398
    1 M' s7 \, r$ R3 \& g% k
    4 i0 R' Z  a, D3 g, v11.6 处理HTTP请求  400
    + H  p* w# D* p6 _2 j
    $ U5 U" v% H5 W4 X11.6.1 ngx_http_core_generic_phase  406( f% B$ R3 r6 t! ~" ^# g

    1 A0 p0 z" {! a$ C9 p0 p& Y11.6.2 ngx_http_core_rewrite_phase  408/ F8 r3 M5 Z6 t
    * T: l* w- m4 q9 N* s$ Q& T
    11.6.3 ngx_http_core_access_phase  409  T5 Y$ L( L7 V' U7 x

    8 I0 R0 N7 n, h$ Z11.6.4 ngx_http_core_content_phase  4128 @: Y5 ]& J) g
    " O8 ~: Z6 h6 p" g1 ~5 R( E2 k
    11.7 subrequest与post请求  4156 E+ u$ {/ e3 x, p* |
    . N" y- D- {( Z% O4 c. w4 b/ W
    11.8 处理HTTP包体  417, x8 o4 m5 j! a7 v# i
    7 D! A) o" E: y) k# r) g( ^+ W
    11.8.1 接收包体  419; i& B! ?2 t7 U. x

    * X0 c/ s( m8 q& g11.8.2 放弃接收包体 425
    + {3 \& J6 g2 D9 f2 k+ l: b5 ~7 x4 ^
      X( z8 P0 h" T# R$ @3 w% |6 {# s" j11.9 发送HTTP响应  4297 \: k. C; ]1 _3 r' {4 O$ Z

    / t1 L+ D8 e+ l3 R11.9.1 ngx_http_send_header  430
    - Z4 C. s0 _/ x! z/ @8 p; |/ x! [2 o9 r0 `! c
    11.9.2 ngx_http_output_f?ilter  432  f' H: I8 F8 O& d9 F% I
    & l* x) |* \  z, g' S6 i  k
    11.9.3 ngx_http_writer 435# Q' @9 S. n3 l' a
    " @# X/ Z! {# E2 w
    11.10 结束HTTP请求  437
    7 Y- q" [  @: U8 l4 a
    5 o  Q: E' r. m+ g8 _" T6 K11.10.1 ngx_http_close_connection  438
    , U) t" ^5 G. n4 g! [
    ! v& D% d% f9 v, K9 T11.10.2 ngx_http_free_request  4391 k$ J8 i$ f! x( O3 x/ b
    ) u/ S8 Y. V; d. Q  m- Y1 l
    11.10.3 ngx_http_close_request  440
    9 Y0 t7 L  }' B7 H; Q) D1 N! U6 b9 m2 R2 P# F/ V7 [" e& e, ?
    11.10.4 ngx_http_f?inalize_connection  441
    ; `8 w3 v; a; ?; A4 g' f+ R
    % n# J. C2 Q1 H0 r: A. s11.10.5 ngx_http_terminate_request  443
      G  w/ t: }! p* f
    9 |  E& v+ ~: u/ x( B! a- F3 Y11.10.6 ngx_http_f?inalize_request  443
    5 R/ L2 ]( t6 |, ~; ~
    8 `! a6 e: \2 R11.11 小结  446
    . w+ R* \0 F9 `6 i  {) t& T% _
    ; ^% _& F" z5 a/ Z, B第12章 upstream机制的设计与实现  4477 I1 k- B+ A8 v* l0 u, X; O
    ( W" m7 S+ V1 t3 `, Q
    12.1 upstream机制概述  4483 K. L+ T. C3 H. X& O
    ' ~( ^2 u8 o2 M2 f% a; q9 n/ @
    12.1.1 设计目的  448
    " z, D5 L/ P! F( r4 e, ^, @, g  `* z2 \% H( K* E# Z& v, @  H
    12.1.2 ngx_http_upstream_t数据结构的意义  450
    1 e7 l) |& n( t( O. h$ h3 [  {5 _$ c6 v4 {5 v9 s
    12.1.3 ngx_http_upstream_conf_t配置结构体  453/ ~( c+ v5 j, F' B. X
    ( j6 n/ T! O0 S, P, W/ m# Z
    12.2 启动upstream 455
    . ^1 I. I# n' K$ V7 B( X
    % E) s5 {5 d" A" F) ]% u6 G2 a4 T, _12.3 与上游服务器建立连接 457
    " K7 ]0 \, d2 g2 m
    7 Q5 T. I8 ]# _9 S1 c7 X# X& q+ v# m12.4 发送请求到上游服务器 460" q6 D0 C0 X/ ]( K3 R1 w/ q

    5 C3 K* R, q) p1 ]/ }12.5 接收上游服务器的响应头部 4638 p9 Y4 h  T: @9 D/ |' G) k% q! V
    : g; T$ ]: J8 F3 L! S. g
    12.5.1 应用层协议的两段划分方式 463
    + @6 p( u5 O& M9 ?3 `& b1 A  y& X- X' C; F! `) O( \4 U2 c
    12.5.2 处理包体的3种方式  464; x  F  H. `4 X1 [
    ( B, ]' A) a7 E$ v
    12.5.3 接收响应头部的流程 465& l0 ^: l! F! G
    ! E1 y, o4 Q) L& |* h" ~- A/ k
    12.6 不转发响应时的处理流程 4694 B0 Q; o4 O  R; x( M5 v+ w

    - i" D1 X# m2 y12.6.1 input_f?ilter方法的设计  469
    8 d" V, F; O; W7 ]) {/ M
    : ~  L4 v( h7 {12.6.2 默认的input_f?ilter方法  470# m% y% v; M" M7 L  q- g4 O% R

    - I  r. c/ x6 m6 z12.6.3 接收包体的流程 4728 F0 l1 U" U( x8 A! [( U
    : R0 _1 i2 z$ n! \: F; N# J
    12.7 以下游网速优先来转发响应 473: T( q3 Y! r2 {# u' I, ~

    8 L  _( n& v% k- H) n12.7.1 转发响应的包头 474! r* {" s* n2 y+ M4 U8 @5 T
    ( j1 J# e# w8 D7 e2 p
    12.7.2 转发响应的包体 477
    ) c% n' }4 `' T7 q  E/ c) t$ v. m$ w
    12.8 以上游网速优先来转发响应 481
    . |% v1 @4 y5 h3 Y9 y7 {) ~; D2 k* x- y3 a
    12.8.1 ngx_event_pipe_t结构体的意义  481/ W+ M0 Z8 y3 X3 c% B& E' P- ^1 \- W

    : f0 h& h9 S& c! ~12.8.2 转发响应的包头 485
      v8 p  O! N3 K; e( d0 X! H$ a( K' M) @: d* S% l, L2 O
    12.8.3 转发响应的包体 4873 \/ M% r, Q0 }7 N
    ) t, o' e: E8 H) f: d
    12.8.4 ngx_event_pipe_read_upstream方法  489
    / U/ N; T3 o' t( j7 E2 T1 I5 H9 ?9 V# e; P( p  E; j
    12.8.5 ngx_event_pipe_write_to_downstream方法  494
    2 L$ q& o) I" L9 B
    2 h- q. D# e, Y) b; v12.9 结束upstream请求  4964 e$ \3 v$ L. U0 q
    % E0 I! V/ r; J5 w
    12.10 小结  499
    7 C1 G4 a1 D* n, r, ~! y, y4 O
    第13章 邮件代理模块  500
    ! W) L9 S# q2 K5 u+ V6 ^5 e. [$ U5 T
    2 W/ N1 b1 ?! A4 o" F4 N$ H13.1 邮件代理服务器的功能 500  E* |" u, S& a+ i* x
    3 U% G* O: y$ w! f+ D+ K2 W1 D$ O
    13.2 邮件模块的处理框架 503! R0 M' b$ [6 [3 D

    $ R2 J4 D  I- Z& c13.2.1 一个请求的8个独立处理阶段  503
    7 j; [- j9 d* w2 F2 d' Y$ W5 ^% t
    13.2.2 邮件类模块的定义 504, q9 q2 O) i: x% F2 b0 T; `; n; p" m
      \3 C  g7 B# K) ^
    13.2.3 邮件框架的初始化 506, ?5 f& T) c- o
    " Q2 m5 d3 C& E+ r4 A7 z, I; B$ O
    13.3 初始化请求  506
    ) Y; h- ?3 D) o& E
    . U, ^$ P4 b, q$ q% `" t) N% ~13.3.1 描述邮件请求的ngx_mail_session_t结构体  506/ j: t+ V: f2 y3 j

    8 X2 R7 X: N9 {: e5 j13.3.2 初始化邮件请求的流程 509
    + \6 M( W2 }" v, a" }7 H2 `0 p
    6 p9 P" s7 C. @13.4 接收并解析客户端请求 509
    ( @, v" I( ?" k" {( t# j# _+ k2 z: J: f
    # o. p& s8 d+ W5 c& l% A$ o13.5 邮件认证  510% e) F/ {4 c. A# |* p4 t0 Z# K
    $ ^+ a- F7 }/ X2 T; I# L* Q
    13.5.1 ngx_mail_auth_http_ctx_t结构体  5100 P0 c% ^& u* E6 Z. p. z
    ' G4 E9 \2 H4 \2 W- r, j
    13.5.2 与认证服务器建立连接 5116 O# w) R. t! J6 a% o
    ! I1 ]9 N! ~5 q: p5 h9 W
    13.5.3 发送请求到认证服务器 513$ Q* u3 \; D5 C" m$ M4 _7 [
    ' }: U, z1 Q# }" I1 M( {) |
    13.5.4 接收并解析响应 514
    * v! T3 q  m: E1 a8 o1 K
    * s6 u- b5 y% G; ~% c% u8 k13.6 与上游邮件服务器间的认证交互 514
    3 h' b; @$ p0 G; G9 A% p4 k+ n6 P6 x
    13.6.1 ngx_mail_proxy_ctx_t结构体  516/ G$ G& ?; _- L
    , i6 K8 B  F# p# _8 w
    13.6.2 向上游邮件服务器发起连接 516
    ; s4 j: v+ i( E% w' V) Z/ T% m3 R$ v  m5 G1 G0 ^( z
    13.6.3 与邮件服务器认证交互的过程 518
    ) ?8 q2 W$ F0 ?$ b/ \0 H, x: c6 E( x2 \9 l2 f
    13.7 透传上游邮件服务器与客户端间的流 5205 v) J' X; g# P$ H+ j
      v$ l. v1 J+ }; b4 {% z- s, P
    13.8 小结  524: j+ u$ M7 A" [0 I
    * h* b$ i8 g  o" J: h
    第14章 进程间的通信机制  5257 g/ `. s% @# e& f9 B. m" s4 C
    1 P8 w) J1 t2 E) `, v7 V
    14.1 概述  5253 u2 z/ k0 y2 J* C* |" X& f# j
    " y& C- L  c) k" @- D
    14.2 共享内存  526
    / g$ w8 U  d8 Q% E  x
    $ [. |! Z; E2 }6 Y14.3 原子操作  530
    $ A# [' ~0 Q, B+ U7 ^- m; v% ~4 W7 b
    & S7 O' C7 ?! c14.3.1 不支持原子库下的原子操作 530( Y- Z9 j6 S: X. `4 V  Z
    ( l% ~# c" `2 |
    14.3.2 x86架构下的原子操作  531% N+ }) [# g) L: l- @+ _  }2 C- Z, ^
    : z" V; M% \) F4 p0 J
    14.3.3 自旋锁  5333 n" o& V9 m2 F- V
    & ^; l6 F$ N6 X9 t. J
    14.4 Nginx频道  535
      y* m4 t% z* G' v$ M; E; o, U5 S! p! X+ Y+ R
    14.5 信号  538
    * [6 i! g3 U8 d0 N1 l6 ]4 _( J8 A# P6 [* }' m. N& I6 ~
    14.6 信号量  540
    ) E% [% T8 u2 y' ^5 C1 W
    - E* g& t- E$ r( Z6 x8 T14.7 文件锁  541
    & [2 ?$ y. \& H0 X% [/ o) [  a+ q2 x( ?) O( D( q
    14.8 互斥锁  544' i" A7 [$ s6 T5 s5 n" C2 ?* _. E
    + \: e4 J6 t3 F' P
    14.8.1 文件锁实现的ngx_shmtx_t锁  546, {7 S4 o9 S: i5 c, z: A6 C  T
    & q! o! X* R3 v5 h# |- ]
    14.8.2 原子变量实现的ngx_shmtx_t锁  548
    ( K. ?4 ^) {1 z, I: f' n
    0 N3 t- ?! J, j  W2 C/ o6 ?14.9 小结  553
      j- T- a  h2 W' _7 ?) N' H: ~) ]9 m4 g  v/ Q9 J: I) y8 b
    第15章 变量  554
    7 @3 [; D! _/ Q3 ^! V+ J! [5 Y' u
    15.1 使用内部变量开发模块 555. J' `/ i) s0 R* Y9 c

    ' x! p) r2 w1 q' D0 y( b2 S8 ?15.1.1 定义模块  556: P* {1 S: @- ?% V/ ~

    7 s% ~5 n  L$ [: i4 D" D0 K, }15.1.2 定义http模块加载方式  557
    # h( H. l6 M* n8 @0 N7 M; s
    % v& x$ k. n+ `15.1.3 解析配置中的变量 558
    # M  u/ G/ V$ y  t2 }9 _: \
    . B9 h' F. s/ s) \% o15.1.4 处理请求  560( Z6 P% s4 w5 a! T2 F
    ' O- u( Z& I: L3 A
    15.2 内部变量工作原理 561* [' |, r3 @) n! N" U

    + L9 V6 K) R  j) e* z5 b! H15.2.1 何时定义变量 561& E+ r2 U' r1 t; v+ i& g

    $ c2 P" Y, O% ^/ X' O15.2.2 相关数据结构详述 5640 Z/ R4 S2 a- w3 k. G* f) R

    8 }& }" ~, I- q* Y+ v0 u15.2.3 定义变量的方法 572
    4 E. ?( u% j+ i5 ?' ^: N
    3 ^( @2 @% B6 E% ~# A7 B* V) T15.2.4 使用变量的方法 5728 x2 r" X! U. b8 T3 S. {# S

    3 y  D( h+ J4 o& e* F& g0 M15.2.5 如何解析变量 573: a1 f/ F/ b( c! e, q: V+ K( e
    , E! |: l/ e- m
    15.3 定义内部变量  5765 ?* d! e5 j6 q0 m) W
    ( D. Q# X% F# T. w: Z
    15.4 外部变量与脚本引擎 5771 q, f7 C# S: Y- [- i5 N$ }9 G+ _

    5 D/ h3 t: r% ~9 h* m& O. h3 e7 X15.4.1 相关数据结构 578
    % c5 U3 Q  s: a# t; `2 i. o- S3 S, x% r* J
    # W# b3 d1 _7 j0 y5 O15.4.2 编译“set”脚本  581. L: k% q4 |% Z

    1 O; K  T% R2 |15.4.3 脚本执行流程 586
    & F8 C4 m, M& Y, F1 B# C1 b) ?0 M
    15.5 小结  5895 X1 E0 i. u% W

    3 h, K" h+ `1 y, e第16章 slab共享内存  590) N9 q7 w# b8 W* l

    . Z0 D! W+ I+ b: R" q' p16.1 操作slab共享内存的方法  590
    $ }& Z8 t% `' z3 h  t; x2 d9 r( K% `, @  k+ c
    16.2 使用slab共享内存池的例子  592
    $ P6 r$ _' z4 n% W9 s- A
    6 Y, i9 ?9 f) l/ }, m2 x; j16.2.1 共享内存中的数据结构 593
    0 l! P. p% q. x+ v) O2 `+ n, s6 \  D" r6 T* y* g$ W
    16.2.2 操作共享内存中的红黑树与链表 5952 W  E! |7 @# L9 ~' a$ h
    5 e; y- a6 I* F7 j3 Y( s
    16.2.3 解析配置文件 600$ |" T6 L9 T0 b& F
    , z% z9 I" G: \4 l; k8 ~
    16.2.4 定义模块  6033 L  k0 O! Q0 ]9 e( I

    6 R( ~# v' y( U3 O16.3 slab内存管理的实现原理  605
    ) S% _. N- u9 N4 ^7 L3 w8 {  |% q" @
    16.3.1 内存结构布局 607" [5 r2 z+ V/ ~: E1 \
    * }4 E& Y+ j0 A3 ~  ]
    16.3.2 分配内存流程 613
    4 ^1 T# \; ?6 Z/ C: d
    : q5 d2 [0 x9 l7 x16.3.3 释放内存流程 617/ G  @2 `* N( H/ {: D
    ; M# K, }& i2 m7 S& W& t
    16.3.4 如何使用位操作 619
    % v+ O. b$ e: H+ o
    * @/ n" R* }1 k$ @6 \" I5 o16.3.5 slab内存池间的管理  624
    : V$ b5 A; D4 K: k. w" y, W1 B, ]3 e1 t
    16.4 小结  624

    / {2 U7 B1 z3 W+ l  D, M$ K# r+ @/ N7 [2 c
    5 q( @0 E  t- f; R5 `

    + J' b1 ]: j8 M- _# L6 X# g0 Q
    2 H5 O; j# U) f* y) p  J; Q
    百度网盘下载地址链接(百度云):java自学网(javazx.com)深入理解Nginx:模块开发与架构解析(第2版) PDF 高清 电子书 百度云.zip【密码回帖可见】20200802更新
    - E. z1 G! T5 T
    游客,如果您要查看本帖隐藏内容请回复
    # X! r- R: J% k/ @0 s4 W3 I

    " r- |/ _( H4 d& g/ G0 F
    回复

    使用道具 举报

  • 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
    0 r; o! R8 |0 U; d
    回复 支持 反对

    使用道具 举报

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

    [LV.7]自成一派

    0

    主题

    306

    帖子

    2724

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    [LV.1]初学乍练

    0

    主题

    31

    帖子

    70

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    [LV.2]登堂入室

    0

    主题

    25

    帖子

    107

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    [LV.1]初学乍练

    0

    主题

    42

    帖子

    92

    积分

    普通会员

    Rank: 2

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-21 21:13 , Processed in 0.308851 second(s), 39 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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