第1部分 Nginx服务器 3
第1章 Nginx的功能 3
1.1 功能描述 3
1.1.1 基本HTTP功能 3
1.1.2 其他HTTP功能 3
1.1.3 邮件代理服务器功能 4
1.1.4 架构和可扩展性 4
1.1.5 被测试的系统和平台 4
1.2 服务器的类型 5
1.3 认识Nginx服务器的基本模块 5
1.3.1 Nginx的内核模块 6
1.3.2 Nginx的事件模块 11
1.3.3 Nginx的HTTP内核模块 13
第2章 Nginx的模块管理和进程管理 37
2.1 模块管理 37
2.1.1 从源码看模块 37
2.1.2 选择使用Nginx的模块 39
2.1.3 Nginx使用第三方模块 41
2.2 进程管理 41
2.2.1 master进程和worker进程 41
2.2.2 关于worker数目的设置 43
2.3 针对Nginx对Linux系统的优化 43
2.3.1 关闭系统中不需要的服务 44
2.3.2 优化写磁盘操作 44
2.3.3 优化资源限制 45
2.3.4 优化内核TCP选项 45
2.4 优化Nginx服务器 47
2.4.1 关闭访问日志 47
2.4.2 使用epoll 48
2.4.3 Nginx服务器配置优化 48
第3章 Nginx如何处理一个请求 49
3.1 IP、域名部分的处理 49
3.1.1 基于名字的虚拟主机 49
3.1.2 阻止处理对不明确主机名的请求 50
3.1.3 基于IP和域名的虚拟域名服务器处理请求 50
3.2 URI部分的处理 51
3.2.1 实例 51
3.2.2 分析 52
第4章 服务器名字 54
4.1 通配符名字 54
4.2 正则表达式名字 55
4.3 其他不同种类的名字 56
4.4 名字优化 57
4.5 兼容性 59
4.6 对服务器名字的扩展 59
4.7 基于目录名的域名访问 59
4.7.1 正则表达式处于主机名字的位置上 59
4.7.2 正则表达式处于域名的位置上 61
4.8 关于$1、$2…的使用 63
第5章 协助用户操作Nginx的工具 65
5.1 工具1——nginx.vim 65
5.1.1 下载与安装 65
5.1.2 使用 65
5.2 工具2——eperusio-nginx_ensit 66
5.2.1 下载与安装 66
5.2.2 相关命令 67
5.2.3 实例 69
5.3 工具3——htpasswd.py 74
5.3.1 下载文件 74
5.3.2 命令的使用方法 77
5.4 工具4——Nginx启动脚本 78
第6章 5xx错误及处理 82
6.1 500内部服务器错误 82
6.1.1 问题分析 82
6.1.2 问题解决 83
6.2 502问题——502 bad gateway 84
6.3 504问题——504 gateway time-out 86
第7章 使用TCMalloc优化Nginx 90
7.1 相关安装 90
7.2 配置示例 92
7.3 指令 92
7.4 使用实例 92
第8章 PCRE正则表达式 94
8.1 安装PCRE 94
8.2 命令 97
8.2.1 pcre-config命令 97
8.2.2 pcretest命令 97
8.3 man目录 103
8.4 Nginx与正则表达式 103
8.4.1 正则表达式支持UTF-8 104
8.4.2 Nginx使用正则表达式 106
第9章 Nginx高可用的实现 108
9.1 安装Heartbeat 108
9.1.1 下载安装glue 109
9.1.2 下载安装Heartbeat 110
9.1.3 安装agents 112
9.2 配置Heartbeat 114
9.2.1 ha.cf文件 116
9.2.2 haresources文件 122
9.2.3 authkeys文件 122
9.3 启动Heartbeat 122
9.3.1 环境部署 122
9.3.2 启动主Heartbeat 124
9.3.3 启动备用Heartbeat 127
9.4 测试Heartbeat 130
9.4.1 宕掉主节点 130
9.4.2 重新启动主节点 132
第10章 10个QA 136
10.1 什么是Nginx 136
10.2 Nginx可以安装在哪些操作系统下 136
10.3 Nginx在Windows下的性能如何 136
10.4 Nginx与Apache比较有哪些优点 136
10.5 Nginx解决了C10k问题 137
10.6 从Nginx接收客户端请求处理的角度来说,它与Apache有何不同 137
10.7 安装完成Nginx后,如何查看Nginx的版本 137
10.8 安装完成Nginx后,如何查看configure时的配置 137
10.9 启动Nginx后,能不能看到Nginx当前都支持哪些模块 138
10.10 Https仅能用在指定的目录下吗 138
第2部分 Nginx服务器的功能模块第11章 限制流量 141
11.1 指令 141
11.2 实例配置 142
第12章 限制用户并发连接数 143
12.1 示例配置 143
12.2 指令 143
12.3 使用实例 144
第13章 修改或隐藏Nginx的版本号 147
13.1 隐藏版本号 147
13.2 修改版本号 148
第14章 配置FLV服务器 150
14.1 示例配置 150
14.2 指令 150
14.3 使用实例 150
第15章 Nginx的访问控制 157
15.1 示例配置 157
15.2 指令 157
15.3 使用实例 158
第16章 提供FTP下载 160
16.1 示例配置 160
16.2 指令 160
16.3 使用实例 161
第17章 Nginx与编码 163
17.1 文件和文件名的编码 163
17.2 使用convmv 164
17.3 使用enca 166
17.4 字符集设置模块 168
第18章 网页压缩传输 170
18.1 HttpGzipModule 170
18.2 HttpGzipStaticModule 175
第19章 控制Nginx如何记录日志 180
第20章 map模块的使用 186
第21章 Nginx预防应用层DDoS攻击 191
21.1 Limit request模块 191
21.2 访问测试 193
21.2.1 限制连接数 193
21.2.2 未限制连接数 194
第22章 为Nginx添加、清除或改写响应 199
22.1 HttpHeadersModule 199
22.2 ngx_headers_more 208
第23章 重写URI 225
第24章 Nginx与服务器端包含 238
24.1 ssi指令 239
24.2 使用实例 241
第25章 Nginx与X-Sendfile 247
25.1 处理流程 247
25.2 特殊头 248
25.3 使用实例 249
第26章 在Nginx的响应体之前或之后添加内容 253
第27章 Nginx与访问者的地理信息 258
第28章 Nginx的图像处理 266
第29章 Iocation中随机显示文件 269
第30章 后台Nginx服务器记录原始客户端的IP地址 271
第31章 解决防盗链 274
31.1 使用Referer模块 274
31.2 使用AccessKey模块 275
31.3 使用SecureLink模块 279
第32章 Nginx提供HTTPS服务 286
32.1 兼容性 286
32.2 安装SSL服务 286
32.3 通配符证书 291
32.4 变量 291
32.5 非标准的错误代码 292
32.6 使用举例 292
32.6.1 单向认证 292
32.6.2 更新Nginx配置 295
32.6.3 访问测试 295
32.6.4 双向认证 296
32.6.5 创建相关目录 298
32.7 HTTPS服务器优化 308
第33章 监控Nginx的工作状态 309
第34章 使用empty_gif 311
第35章 Nginx实现对响应体内容的替换 313
第36章 Nginx的WebDAV 315
第37章 Nginx的Xslt模块 322
第38章 Nginx的基本认证方式 324
38.1 生成密码 325
38.2 添加配置 329
38.3 访问测试 329
第39章 Nginx的cookie 331
第40章 Nginx基于客户端请求头的访问分类 337
第41章 通过Upstream模块使得Nginx实现后台服务器集群 340
第42章 根据浏览器选择主页 344
第43章 关于Nginx提供下载.ipa或.apk文件的处理方法 352
第44章 SCGI 353
44.1 被传递给SCGI服务器的参数 361
44.2 实例1:Perl语言的应用 361
44.3 实例2:Python语言的应用 369
44.4 在Nginx中使用Etag 378
第45章 Expires与ETag 379
45.1 安装nginx-static-etags模块 381
45.2 安装nginx-dynamic-etags模块 385
45.3 四个头的区别与联系 387
第46章 使用upstream_keepalive模块实现keep-live 388
第47章 后台服务器的健康检测 393
第48章 使用sticky模块实现粘贴性会话 401
第49章 Nginx对后台服务器实现“公平”访问 405
第50章 Nginx使用redis数据库 408
50.1 安装redis模块 408
50.2 安装redis2模块 415
50.3 关于redis 425
第51章 Nginx访问MongoDB 430
51.1 安装nginx-gridfs模块 430
51.2 关于MongoDB 433
第52章 Nginx访问Mogilefs 439
第3部分 Nginx与缓存 447
第53章 缓存技术——proxy_cache 447
5.31 了解cache_purge模块 447
53.2 设置Nginx的配置文件 449
53.3 访问测试 451
53.4 手动清除缓存 455
第54章 缓存技术——proxy_store 457
54.1 设置Nginx的配置文件 457
54.2 访问测试 458
54.3 手动清除缓存 461
第55章 缓存技术——Memcached 462
55.1 Memcached服务器 462
55.2 下载并安装libevent库 462
55.3 下载并安装Memcached 465
55.4 Memcached的其他工具 475
55.4.1 damemtop 476
55.4.2 memcached-init 480
55.4.3 start-memcached 482
55.4.4 memcached.sysv 486
55.4.5 memcached-tool 488
55.5 查看Memcached服务的运行情况 494
55.6 服务器的运行情况——详细了解Memcached的协议 496
55.6.1 通信协议 496
55.6.2 键(Key) 496
55.6.3 命令 496
55.6.4 过期时间 497
55.6.5 错误字符串 497
55.6.6 存储数据的命令 498
55.6.7 获取数据的命令 501
55.6.8 删除数据的命令 502
55.6.9 增加/减少数据的命令 503
55.6.10 查询存储状态的命令 505
55.6.11 多方面统计命令 505
55.6.12 条目统计命令 507
55.6.13 其他命令 511
55.6.12 UDP协议 513
55.7 Nginx的Memcached模块 514
55.8 Memcached的客户端 520
55.9 libmemcached 520
55.9.1 libmemcached的安装 521
55.9.2 命令 522
55.9.3 函数 532
第56章 缓存技术——NCache 535
56.1 NCache工作层示意图 536
56.2 请求逻辑图 536
56.3 安装NCache 537
56.4 配置文件 537
第57章 缓存技术——Varnish 543
57.1 了解Varnish 543
57.2 Varnish的访问部署 550
57.2.1 第一种部署方案:Varnish提供80访问 550
57.2.2 第二种部署方案:Varnish位于Nginx之后只提供缓存 551
57.3 Nginx与Varnish的结合 551
57.4 针对Linux系统设置 552
57.4.1 Linux优化内核 552
57.4.2 优化系统资源使用 552
57.5 使用Varnish 553
57.6 缓存大小的设置 559
57.7 VCL配置 561
57.8 Varnish的启动与停止 563
57.9 Varnish的访问日志 572
57.10 守护进程varnishd 580
57.11 Varnish提供的命令 602
57.12 手动清除缓存 624
57.12.1 基于命令行方式清除Varnish缓存 625
57.12.2 基于应用程序方式清除Varnish缓存 632
57.13 VCL语言 636
57.13.1 默认配置文件 636
57.13.2 操作符 639
57.13.3 数据结构 640
57.13.4 变量 642
57.13.5 ACL指令 645
57.13.6 Varnish的函数 651
57.13.7 子程序 652
57.13.8 ESI 658
57.14 grace模式和saint模式 660
57.14.1 grace模式 661
57.14.2 saint模式 662
57.14.3 grace模式和saint模式的局限性 662