当前位置:首页 » 操作系统 » lighttpd源码分析

lighttpd源码分析

发布时间: 2022-06-02 23:53:48

① 自己开发的Web服务器如何解析php文件

WAMP、LAMP里,A是Apache,P是PHP,PHP在Apache下一般是以服务器模块方式安装,这些模块在Apache体系结构里属于可选功能层,Apache用apr_proc_create()函数为每个模块创建一个子进程,每个进程的内存空间独立,可以防止互相干扰。
WNMP、LNMP里的N是Nginx,Nginx主要通过FastCGI接口调用PHP之类的外部程序。
FastCGI是一个编程接口,可以将HTTP服务器和脚本解析服务器分开。Apache、Nginx、Lighttpd都实现了FastCGI接口。
如果想找个实现FastCGI接口的例子,推荐看Nginx的源码(ngx_http_fastcgi_mole.c)。
Apache源码里跟FastCGI接口有关的大致是这几个文件:
fcgistarter.c
fcgi_protocol.h
mod_proxy_fcgi.c
更多内容可以搜“Apache源码分析”、“Nginx源码分析”、“FastCGI”。

② Nginx /Lighttpd是否支持asp

1. nginx和lighttpd基本上是同质的,都是采用基于epoll/kqueue/select的全异步事件模型,可以轻松地维持大量的连接,不惧怕 慢连接攻击。两者都提供了丰富的HTTP服务功能,例如压缩、url rewrite、虚拟主机、SSL、proxy等等。
Nginx大量模仿了apache的设计风格,比如模块的定义、装配、以及配置数据的解析和组织方式等等。Lighttpd则是自己设计的一套。 和lighttpd相比,Nginx做事更加精细,它提供的一些比较特别。
Nginx的代码入手更困难一些(主观看法)。举个例子,Nginx内部的HTTP状态迁移是比较隐性的,它通过一系列的handler赋值来实现,如果 要完整地追踪一次HTTP请求的处理过程,比较费劲。这个就说明,一旦出了问题,追查比较困难。而lighttpd的代码中有一个显式的HTTP状态迁 移,一目了然,相比之下比较好看一些。
扩展模块开发方面,nginx的mole模仿了apache的设计和实现方式,和lighttpd是完全不同的。主观感觉上nginx模块开发的入门门槛更高一些,因为必须弄清楚nginx的内部运行机制才好确认你写的代码到底有没有问题和隐患。
和lighttpd一样,nginx同样存在着开发文档很少的问题。最好的文档还是源码本身。
2. Nginx完全不支持动态库so,所以它的模块都必须静态编译,且不能动态加载。要加载哪些模块,模块按照怎样的顺序执行,都是在编译期由 configure指定的,如果要调整,也只能重新编译一遍,无法通过改配置来实现。在这方面,Lighttpd做得比nginx好。Lighttpd支 持动态so,并且可以在配置文件中调整各模块的先后顺序,在某些应用场景下,调整模块的先后顺序是很有用的。
条件配置语法的灵活性,lighttpd比nginx要好一些。
3. 根据简单性能对比,Nginx的性能比lighttpd略好

③ lighttpd,nginx哪个好

nginx 比较流行,网上资料也多。

④ Lighttpd源码分析的作者自序

作为最为优秀的轻量级Web Server之一,Lighttpd有着众多的忠实拥护者和使用者。本书就是一本介绍分析Lighttpd源码的初级读本,其主要目标在于:一方面让已经接触过网络编程的读者可以从Lighttpd这个开源项目中学习到更深入实际的网络编程知识,另一方面也可以让使用Lighttpd作为自己管理站点Web服务器的读者能更有效地使用、优化甚至定制自己的Lighttpd服务器应用程序。
目前对于学习网络编程最好的参考书籍当属《UNIX网络编程》(第3版)1,但是其包含内容众多,讲解太过广泛深入,不是在短期时间内就能很好领会并灵活运用的,因此它更适合当作我们桌边的手册或圣经。在实践项目中学习,从实践源码中理解,这一直是我们学习的最好方法,虽然当前书市也有不少关于实践项目介绍的书,但是由于实在太过庞大(比如Apache)或实践项目不具有代表性,选择性的讲解使得许多细节被忽略,细节不明朗使得读者也很难清楚地从整体上去把握。本书选择的Lighttpd开源项目内容较少却功能实现完整,是难得的学习网络编程的源码材料。另外,我们在讲解该项目源码时紧密结合Web开发的相关RFC协议文档(比如RFC 822、RFC 1034、RFC 1035、RFC 1738、RFC 2068、RFC 2396、RFC 2616、RFC 2732、RFC 3986等)对所分析的代码为什么这样写都做出了详细的解释,并指明了其依据的是哪个RFC的哪个部分,可以让读者明确查找方向,以快速、进一步地对其深入理解。
总的来说,Lighttpd源码虽然代码量不多,但是其设计巧妙,效率高,实现功能完备并且易扩展,因此能在众多优秀Web Server中取得一席之地。Lighttpd编码风格优美,C代码简洁明了,是学习linux/C网络编程、熟悉Http服务器编写的良好范例。另外,源码把和Web有关的众多国际标准或协议(如Http、Url、Html等)实现得恰如其分,阅读Lighttpd源码,不管是C基础还是网络协议实现,都可以从中获益良多。
本书针对的Lighttpd项目版本为最新(2008年12月16日)的稳定版本1.4.202,一共包含有137个文件。在本书的实际讲解中,这些文件并不会被全部讲到,这主要是由于Lighttpd插件太多,不可能一一讲解到,但是由于这些插件有一个统一的骨架,因此对其中一个插件的理解自然可以类推到其他插件,而本书对Lighttpd插件的整体以及几个具有代表性的插件进行了详细讲解,因此读者完全不用担心会影响自己对Lighttpd源码的理解。除了源码分析知识外,另外一些涉及的技巧(比如Linux操作技巧)、工具等也会给出提示和介绍,以便初学者也能顺利阅读本书。
本书的目标读者定位在想要学习Linux/C网络编程或者想要提高自己网络编程水平以及对Web服务后台开发感兴趣的计算机专业开发研究人员;对于使用Lighttpd作为自己管理站点Web服务器的用户阅读本书也能获取一定的相关帮助。
作为本书的作者,我把阅读Lighttpd源码的总结尽可能详细地记录下来,供大家学习参考。由于本人才疏学浅,又经验不足,因此本书中会存在不足之上,请大家不吝赐教。
最后,感谢Jan Kneschke3大师为我们提供了这么优秀的开源项目,感谢曾经在CU、CSDN、BAIDU、LQ等论坛、网站直接或间接地帮助过我的各位热心网友。
高群凯

⑤ Lighttpd源码分析的图书目录

前言
第1章 Lighttpd介绍与分析准备工作 1
1.1 Lighttpd介绍 1
1.1.1 什么是Lighttpd 1
1.1.2 Lighttpd功能概述 1
1.2 源码分析的准备工作 3
1.2.1 Lighttpd源码下载与组织结构 3
1.2.2 Lighttpd源码分析工具 4
1.2.3 系统编译环境 6
1.2.4 Lighttpd编译运行 6
1.2.5 其他准备 7
1.3 本书内容综述 7
1.4 本章总结 8
第2章 Lighttpd网络服务主模型 9
2.1 概述 9
2.2 Lighttpd主进程执行流程 10
2.2.1 Lighttpd进程守护化 10
2.2.2 Lighttpd多进程网络服务模型 14
2.3 Lighttpd信号处理机制 20
2.3.1 信号的概念 20
2.3.2 Lighttpd中信号处理机制 21
2.4 Lighttpd工作进程处理模型 25
2.5 本章总结 26
第3章 Lighttpd数据结构 27
3.1 概述 27
3.2 bitset数据结构 27
3.2.1 结构说明 27
3.2.2 结构定义 27
3.2.3 结构操作 30
3.3 buffer数据结构 32
3.3.1 结构说明 32
3.3.2 结构定义 32
3.3.3 结构操作 33
3.4 data_xxxxx数据结构 65
3.4.1 结构说明 65
3.4.2 结构定义 65
3.4.3 结构操作 67
3.5 array数据结构 67
3.5.1 结构说明 67
3.5.2 结构定义 68
3.5.3 结构操作 69
3.6 chunk数据结构 78
3.6.1 结构说明 78
3.6.2 结构定义 78
3.6.3 结构操作 80
3.7 keyvalue数据结构 88
3.7.1 结构说明 88
3.7.2 结构定义 88
3.7.3 结构操作 91
3.8 本章总结 92
第4章 伸展树 93
4.1 概述 93
4.2 伸展树基础知识 93
4.2.1 伸展树介绍 93
4.2.2 伸展树的自底向上伸展 94
4.2.3 伸展树的自顶向下伸展 98
4.3 Lighttpd中伸展树实现源码解析 101
4.3.1 结构定义 101
4.3.2 结构操作 102
4.4 本章总结 106
4.5 参考文献 106
第5章 日志系统 108
5.1 概述 108
5.2 日志源码解析 108
5.2.1 日志系统头文件 108
5.2.2 日志系统实现文件 109
5.3 本章总结 124
第6章 文件状态缓存器 125
6.1 概述 125
6.2 ETag知识 125
6.2.1 ETag的定义 125
6.2.2 ETag的功能 126
6.2.3 ETag的优势 127
6.2.4 Lighttpd中ETag的实现 128
6.2.5 Lighttpd中ETag的使用 130
6.3 文件状态缓存器 134
6.3.1 缓存器设计思路 134
6.3.2 缓存器结构定义 134
6.3.3 缓存器实现 137
6.4 本章总结 159
第7章 配置信息加载 160
7.1 概述 160
7.2 配置信息范例与程序加载结果 160
7.2.1 Lighttpd配置信息的范例 160
7.2.2 Lighttpd配置信息范例的加载结果 164
7.3 加载配置信息的源码分析 167
7.3.1 Lighttpd配置信息存储结构 167
7.3.2 Lighttpd配置信息加载的函数
调用流程 172
7.4 客户端连接配置信息 203
7.4.1 条件配置信息缓存存储结构 203
7.4.2 客户端连接配置信息动态获取 204
7.5 本章总结 215
第8章 I/O多路复用技术模型 216
8.1 概述 216
8.2 I/O模型基础知识 216
8.2.1 I/O模型分类介绍 216
8.2.2 常见I/O多路复用实现技术 221
8.3 Lighttpd中多路复用技术模型应用 236
8.3.1 整合多种复用技术模型的数据结
构封装 237
8.3.2 I/O多路复用技术模型的使用 250
8.3.3 六种I/O多路复用技术模型的实现 256
8.4 本章总结 279
第9章 插件链 280
9.1 概述 280
9.2 插件内部结构 280
9.2.1 数据结构 280
9.2.2 函数接口 283
9.3 插件组织结构 286
9.3.1 串链结构 286
9.3.2 插件组织结构源码分析 286
9.4 本章总结 296
第10章 网络请求服务响应流程 297
10.1 概述 297
10.2 简单网络服务通信模型 297
10.3 Lighttpd网络服务通信模型 298
10.3.1 通信模型总图 298
10.3.2 通信模型源码分析 299
10.4 本章总结 402
第11章 请求响应数据快速传输方式 403
11.1 概述 403
11.2 三种数据传输方式 403
11.2.1 内核系统调用架构 403
11.2.2 read/write数据读写传输方式 405
11.2.3 readv/writev数据读写传输方式 408
11.2.4 “零拷贝”(sendfile)数据读
写传输方式 409
11.3 传输方式程序实现 413
11.3.1 源码network_write.c分析 413
11.3.2 源码network_writev.c分析 417
11.3.3 源码network_linux_sendfile.c
分析 423
11.4 本章总结 428
第12章 基本插件模块 429
12.1 概述 429
12.2 mod_indexfile插件模块 429
12.2.1 数据结构 429
12.2.2 函数接口 430
12.3 mod_dirlisting插件模块 433
12.3.1 数据结构 433
12.3.2 梳子排序 439
12.4 mod_staticfile插件模块 441
12.4.1 数据结构 442
12.4.2 函数接口 442
12.5 本章总结 443
后记 444
附录一 ASCII码字符表 445
附录二 扩展ASCII码字符表 446
附录三 客户端请求连接的有限状态
机转换图 447
附录四 HTTP状态码简介 448
附录五 参考资料 449

⑥ 如何让lighttpd的spawn-fcgi自启动

修改编译spawn-fcgi因为用spawn-fcgi 启动后不能哟 -u root 启动FastCGI进程。所以修改了源代码:下载代码[plain]wget download/spawn-fcgi/releases-1.6.x/spawn-fcgi-1.6.3.tar.gz 解压后进入目录,在文件src/spawn-fcgi.c中注释掉一段代码:[plain]/* if (my_uid == 0) { fprintf(stderr, spawn-fcgi: I will not set uid to 0/n); return -1; } */ 类似的还有两处要注释。运行./configure然后编译makemake installmake install 不大灵光,手动拷贝吧。现在再试试看,搞定了。

热点内容
安卓怎么快捷关程序 发布:2025-01-10 18:35:48 浏览:922
仔细的算法 发布:2025-01-10 18:28:30 浏览:546
c语言判断是否为回文数 发布:2025-01-10 18:21:31 浏览:783
win7vhd加密 发布:2025-01-10 18:20:35 浏览:420
手机存储空间里的其他怎么清理 发布:2025-01-10 18:19:59 浏览:801
二手的电脑服务器都怎么处理了 发布:2025-01-10 18:19:05 浏览:906
定压补水装置如何配置 发布:2025-01-10 18:12:34 浏览:431
安卓是华为的什么 发布:2025-01-10 18:12:27 浏览:541
pythonsetget 发布:2025-01-10 17:53:12 浏览:854
买脚本多少钱 发布:2025-01-10 17:52:34 浏览:936