欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    深入理解Nginx模块开发与架构解析.docx

    • 资源ID:70346550       资源大小:40.30KB        全文页数:9页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    深入理解Nginx模块开发与架构解析.docx

    深入理解Nginx:模块开发与架构解析深入理解Nginx:模块开发与架构解析基本信息作者: 陶辉 出版社:机械工业出版社ISBN:9787111414780上架时间:2013-3-20出版日期:2013 年4月开本:16开页码:1版次:1-1所属分类:计算机 > 计算机网络 > Web Server > WebServer内容简介 计算机书籍深入理解nginx:模块开发与架构解析是阿里巴巴资深nginx技术专家呕心沥血之作,是作者多年的经验结晶,也是目前市场上唯一一本通过还原nginx设计思想,剖析nginx架构来帮助读者快速高效开发http模块的图书。 深入理解nginx:模块开发与架构解析首先通过介绍官方nginx的基本用法和配置规则,帮助读者了解一般nginx模块的用法,然后重点介绍如何开发http模块(含http过滤模块)来得到定制的nginx,其中包括开发一个功能复杂的模块所需要了解的各种知识,如nginx的基础数据结构、配置项的解析、记录日志的工具以及upstream、subrequest的使用方法等。在此基础上,综合nginx框架代码分析nginx的架构,介绍其设计理念和技巧,进一步帮助读者自由、有效地开发出功能丰富、性能一流的nginx模块。目录深入理解nginx:模块开发与架构解析 前言 第一部分nginx能帮我们做什么 第1章研究nginx前的准备工作 / 2 1.1nginx是什么 / 2 1.2为什么选择nginx / 4 1.3准备工作 / 7 1.3.1linux操作系统 / 7 1.3.2使用nginx的必备软件 / 7 1.3.3磁盘目录 / 8 1.3.4linux内核参数的优化 / 9 1.3.5获取nginx源码 / 11 1.4编译安装nginx / 11 1.5configure详解 / 11 1.5.1configure的命令参数 / 12 1.5.2configure执行流程 / 18 1.5.3configure生成的文件 / 22 1.6nginx的命令行控制 / 24 1.7小结 / 27 第2章nginx的配置 / 28 .2.1运行中的nginx进程间的关系 / 28 2.2nginx配置的通用语法 / 31 2.2.1块配置项 / 31 2.2.2配置项的语法格式 / 32 2.2.3配置项的注释 / 33 2.2.4配置项的单位 / 33 2.2.5在配置中使用变量 / 33 2.3nginx服务的基本配置 / 34 2.3.1用于调试进程和定位问题的配置项 / 34 2.3.2正常运行的配置项 / 36 2.3.3优化性能的配置项 / 38 2.3.4事件类配置项 / 39 2.4用http核心模块配置一个静态web服务器 / 41 2.4.1虚拟主机与请求的分发 / 42 2.4.2文件路径的定义 / 45 2.4.3内存及磁盘资源的分配 / 48 2.4.4网络连接的设置 / 50 2.4.5mime类型的设置 / 53 2.4.6对客户端请求的限制 / 54 2.4.7文件操作的优化 / 55 2.4.8对客户端请求的特殊处理 / 57 2.4.9ngx_http_core_module模块提供的变量 / 59 2.5用http proxy module配置一个反向代理服务器 / 60 2.5.1负载均衡的基本配置 / 62 2.5.2反向代理的基本配置 / 64 2.6小结 / 68 第二部分如何编写http模块 第3章开发一个简单的http模块 / 70 3.1如何调用http模块 / 70 3.2准备工作 / 72 3.2.1整型的封装 / 72 3.2.2ngx_str_t数据结构 / 73 3.2.3ngx_list_t数据结构 / 73 3.2.4ngx_table_elt_t数据结构 / 77 3.2.5ngx_buf_t数据结构 / 77 3.2.6ngx_chain_t数据结构 / 79 3.3如何将自己的http模块编译进nginx / 79 3.3.1config文件的写法 / 80 3.3.2利用configure脚本将定制的模块加入到nginx中 / 80 3.3.3直接修改makefile文件 / 84 3.4http模块的数据结构 / 85 3.5定义自己的http模块 / 88 3.6处理用户请求 / 92 3.6.1处理方法的返回值 / 92 3.6.2获取uri和参数 / 95 3.6.3获取http头部 / 98 3.6.4获取http包体 / 101 3.7发送响应 / 102 3.7.1发送http头部 / 102 3.7.2将内存中的字符串作为包体发送 / 104 3.7.3经典的“hello world”示例 / 106 3.8将磁盘文件作为包体发送 / 107 3.8.1如何发送磁盘中的文件 / 107 3.8.2清理文件句柄 / 110 3.8.3支持用户多线程下载和断点续传 / 111 3.9用c+语言编写http模块 / 112 3.9.1编译方式的修改 / 112 3.9.2程序中的符号转换 / 114 3.10小结 / 114 第4章配置、error日志和请求上下文 / 115 4.1http配置项的使用场景 / 115 4.2怎样使用http配置 / 117 4.2.1分配用于保存配置参数的数据结构 / 117 4.2.2设定配置项的解析方式 / 119 4.2.3使用14种预设方法解析配置项 / 125 4.2.4自定义配置项处理方法 / 136 4.2.5合并配置项 / 137 4.3http配置模型 / 140 4.3.1解析http配置的流程 / 141 4.3.2http配置模型的内存布局 / 144 4.3.3如何合并配置项 / 147 4.3.4预设配置项处理方法的工作原理 / 149 4.4error日志的用法 / 150 4.5请求的上下文 / 155 4.5.1上下文与全异步web服务器的关系 / 155 4.5.2如何使用http上下文 / 156 4.5.3http框架如何维护上下文结构 / 157 4.6小结 / 158 第5章访问第三方服务 / 159 5.1upstream的使用方式 / 160 5.1.1ngx_http_upstream_t结构体 / 163 5.1.2设置upstream的限制性参数 / 164 5.1.3设置需要访问的第三方服务器地址 / 165 5.1.4设置回调方法 / 166 5.1.5如何启动upstream机制 / 166 5.2回调方法的执行场景 / 167 5.2.1create_request回调方法 / 167 5.2.2reinit_request回调方法 / 169 5.2.3finalize_request回调方法 / 170 5.2.4process_header回调方法 / 171 5.2.5rewrite_redirect回调方法 / 172 5.2.6input_filter_init与input_filter回调方法 / 172 5.3使用upstream的示例 / 173 5.3.1upstream的各种配置参数 / 174 5.3.2请求上下文 / 175 5.3.3在create_request方法中构造请求 / 176 5.3.4在process_header方法中解析包头 / 177 5.3.5在finalize_request方法中释放资源 / 180 5.3.6在ngx_http_mytest_handler方法中启动upstream / 181 5.4subrequest的使用方式 / 183 5.4.1配置子请求的处理方式 / 183 5.4.2实现子请求处理完毕时的回调方法 / 184 5.4.3处理父请求被重新激活后的回调方法 / 185 5.4.4启动subrequest子请求 / 185 5.5subrequest执行过程中的主要场景 / 186 5.5.1如何启动subrequest / 186 5.5.2如何转发多个子请求的响应包体 / 188 5.5.3子请求如何激活父请求 / 192 5.6subrequest使用的例子 / 193 5.6.1配置文件中子请求的设置 / 194 5.6.2请求上下文 / 194 5.6.3子请求结束时的处理方法 / 195 5.6.4父请求的回调方法 / 196 5.6.5启动subrequest / 197 5.7小结 / 198 第6章开发一个简单的http过滤模块 / 199 6.1过滤模块的意义 / 199 6.2过滤模块的调用顺序 / 200 6.2.1过滤链表是如何构成的 / 200 6.2.2过滤链表的顺序 / 203 6.2.3官方默认http过滤模块的功能简介 / 204 6.3http过滤模块的开发步骤 / 206 6.4http过滤模块的简单例子 / 207 6.4.1如何编写config文件 / 208 6.4.2配置项和上下文 / 208 6.4.3定义http过滤模块 / 210 6.4.4初始化http过滤模块 / 211 6.4.5处理请求中的http头部 / 212 6.4.6处理请求中的http包体 / 213 6.5小结 / 214 第7章nginx提供的高级数据结构 / 215 7.1nginx提供的高级数据结构概述 / 215 7.2ngx_queue_t双向链表 / 217 7.2.1为什么设计ngx_queue_t双向链表 / 217 7.2.2双向链表的使用方法 / 217 7.2.3使用双向链表排序的例子 / 219 7.2.4双向链表是如何实现的 / 221 7.3ngx_array_t动态数组 / 222 7.3.1为什么设计ngx_array_t动态数组 / 223 7.3.2动态数组的使用方法 / 223 7.3.3 使用动态数组的例子 / 225 7.3.4动态数组的扩容方式 / 226 7.4ngx_list_t单向链表 / 226 7.5ngx_rbtree_t红黑树 / 227 7.5.1为什么设计ngx_rbtree_t红黑树 / 227 7.5.2红黑树的特性 / 228 7.5.3红黑树的使用方法 / 230 7.5.4使用红黑树的简单例子 / 233 7.5.5如何自定义添加成员方法 / 234 7.6ngx_radix_tree_t基数树 / 236 7.6.1ngx_radix_tree_t基数树的原理 / 236 7.6.2基数树的使用方法 / 238 7.6.3使用基数树的例子 / 239 7.7支持通配符的散列表 / 240 7.7.1ngx_hash_t基本散列表 / 240 7.7.2支持通配符的散列表 / 243 7.7.3带通配符散列表的使用例子 / 250 7.8小结 / 254 第三部分深入nginx 第8章nginx基础架构 / 256 8.1web服务器设计中的关键约束 / 256 8.2nginx的架构设计 / 259 8.2.1优秀的模块化设计 / 259 8.2.2事件驱动架构 / 263 8.2.3请求的多阶段异步处理 / 264 8.2.4管理进程、多工作进程设计 / 267 8.2.5平台无关的代码实现 / 268 8.2.6内存池的设计 / 268 8.2.7使用统一管道过滤器模式的http过滤模块 / 268 8.2.8其他一些用户模块 / 269 8.3nginx框架中的核心结构体ngx_cycle_t / 269 8.3.1ngx_listening_t结构体 / 269 8.3.2ngx_cycle_t结构体 / 271 8.3.3ngx_cycle_t支持的方法 / 273 8.4nginx启动时框架的处理流程 / 275 8.5worker进程是如何工作的 / 278 8.6master进程是如何工作的 / 281 8.7小结 / 286 第9章事件模块 / 287 9.1事件处理框架概述 / 287 9.2nginx事件的定义 / 290 9.3nginx连接的定义 / 293 9.3.1被动连接 / 294 9.3.2主动连接 / 297 9.3.3ngx_connection_t连接池 / 298 9.4ngx_events_module核心模块 / 300 9.4.1如何管理所有事件模块的配置项 / 301 9.4.2管理事件模块 / 303 9.5ngx_event_core_module事件模块 / 305 9.6epoll事件驱动模块 / 310 9.6.1epoll的原理和用法 / 311 9.6.2如何使用epoll / 313 9.6.3ngx_epoll_module模块的实现 / 315 9.7定时器事件 / 323 9.7.1缓存时间的管理 / 324 9.7.2缓存时间的精度 / 326 9.7.3定时器的实现 / 327 9.8事件驱动框架的处理流程 / 328 9.8.1如何建立新连接 / 329 9.8.2如何解决“惊群”问题 / 330 9.8.3如何实现负载均衡 / 333 9.8.4post事件队列 / 334 9.8.5ngx_process_events_and_timers流程 / 335 9.9文件的异步i/o / 338 9.9.1linux内核提供的文件异步i/o / 339 9.9.2ngx_epoll_module模块中实现的针对文件的异步i/o / 342 9.10小结 / 346 第10章http框架的初始化 / 347 10.1http框架概述 / 348 10.2管理http模块的配置项 / 351 10.2.1管理main级别下的配置项 / 352 10.2.2管理server级别下的配置项 / 354 10.2.3管理location级别下的配置项 / 357 10.2.4不同级别配置项的合并 / 362 10.3监听端口的管理 / 367 10.4server的快速检索 / 369 10.5location的快速检索 / 371 10.6http请求的11个处理阶段 / 372 10.6.1http处理阶段的普适规则 / 374 10.6.2ngx_http_post_read_phase阶段 / 376 10.6.3ngx_http_server_rewrite_phase阶段 / 378 10.6.4ngx_http_find_config_phase阶段 / 379 10.6.5ngx_http_rewrite_phase阶段 / 379 10.6.6ngx_http_post_rewrite_phase阶段 / 379 10.6.7ngx_http_preaccess_phase阶段 / 379 10.6.8ngx_http_access_phase阶段 / 380 10.6.9ngx_http_post_access_phase阶段 / 380 10.6.10ngx_http_try_files_phase阶段 / 381 10.6.11ngx_http_content_phase阶段 / 381 10.6.12ngx_http_log_phase阶段 / 382 10.7http框架的初始化流程 / 383 10.8小结 / 385 第11章http框架的执行流程 / 386 11.1http框架执行流程概述 / 387 11.2新连接建立时的行为 / 388 11.3第一次可读事件的处理 / 390 11.4接收http请求行 / 396 11.5接收http头部 / 399 11.6处理http请求 / 403 11.6.1ngx_http_core_generic_phase / 409 11.6.2ngx_http_core_rewrite_phase / 411 11.6.3ngx_http_core_access_phase / 412 11.6.4ngx_http_core_content_phase / 415 11.7subrequest与post请求 / 419 11.8处理http包体 / 421 11.8.1接收包体 / 422 11.8.2放弃接收包体 / 429 11.9发送http响应 / 433 11.9.1ngx_http_send_header / 434 11.9.2ngx_http_output_filter / 436 11.9.3ngx_http_writer / 440 11.10结束http请求 / 442 11.10.1ngx_http_close_connection / 443 11.10.2ngx_http_free_request / 444 11.10.3ngx_http_close_request / 446 11.10.4ngx_http_finalize_connection / 447 11.10.5ngx_http_terminate_request / 447 11.10.6ngx_http_finalize_request / 448 11.11小结 / 452 第12章upstream机制的设计与实现 / 453 12.1upstream机制概述 / 453 12.1.1设计目的 / 454 12.1.2ngx_http_upstream_t数据结构的意义 / 456 12.1.3ngx_http_upstream_conf_t配置结构体 / 459 12.2启动upstream / 462 12.3与上游服务器建立连接 / 464 12.4发送请求到上游服务器 / 467 12.5接收上游服务器的响应头部 / 470 12.5.1应用层协议的两段划分方式 / 470 12.5.2处理包体的3种方式 / 471 12.5.3接收响应头部的流程 / 473 12.6不转发响应时的处理流程 / 476 12.6.1input_filter方法的设计 / 477 12.6.2默认的input_filter方法 / 478 12.6.3接收包体的流程 / 479 12.7以下游网速优先来转发响应 / 481 12.7.1转发响应的包头 / 482 12.7.2转发响应的包体 / 484 12.8以上游网速优先来转发响应 / 489 12.8.1ngx_event_pipe_t结构体的意义 / 489 12.8.2转发响应的包头 / 493 12.8.3转发响应的包体 / 495 12.8.4ngx_event_pipe_read_upstream方法 / 498 12.8.5ngx_event_pipe_write_to_downstream方法 / 502 12.9结束upstream请求 / 504 12.10小结 / 508 第13章邮件代理模块 / 509 13.1邮件代理服务器的功能 / 509 13.2邮件模块的处理框架 / 512 13.2.1一个请求的8个独立处理阶段 / 512 13.2.2邮件类模块的定义 / 514 13.2.3邮件框架的初始化 / 516 13.3初始化请求 / 517 13.3.1描述邮件请求的ngx_mail_session_t结构体 / 517 13.3.2初始化邮件请求的流程 / 519 13.4接收并解析客户端请求 / 520 13.5邮件认证 / 520 13.5.1ngx_mail_auth_http_ctx_t结构体 / 520 13.5.2与认证服务器建立连接 / 522 13.5.3发送请求到认证服务器 / 522 13.5.4接收并解析响应 / 525 13.6与上游邮件服务器间的认证交互 / 526 13.6.1ngx_mail_proxy_ctx_t结构体 / 526 13.6.2向上游邮件服务器发起连接 / 527 13.6.3与邮件服务器认证交互的过程 / 528 13.7透传上游邮件服务器与客户端间的流 / 530 13.8小结 / 535 第14章进程间的通信机制 / 536 14.1概述 / 536 14.2共享内存 / 536 14.3原子操作 / 541 14.3.1不支持原子库下的原子操作 / 541 14.3.2x86架构下的原子操作 / 542 14.3.3自旋锁 / 545 14.4nginx频道 / 546 14.5信号 / 549 14.6信号量 / 551 14.7文件锁 / 553 14.8互斥锁 / 556 14.8.1文件锁实现的ngx_shmtx_t锁 / 558 14.8.2原子变量实现的ngx_shmtx_t锁 / 560 14.9小结 / 565本图书信息来源:中国互动出版网www.china-

    注意事项

    本文(深入理解Nginx模块开发与架构解析.docx)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开