b2c信息网

您现在的位置是:首页 > 昨日新闻 > 正文

昨日新闻

包含lighttpd源码的词条

hacker2022-06-10 00:59:26昨日新闻83
本文目录一览:1、lighttpd,nginx哪个好

本文目录一览:

lighttpd,nginx哪个好

1. nginx和lighttpd基本上是同质的,都是采用基于epoll/kqueue/select的全异步事件模型,可以轻松地维持大量的连接,不惧怕 慢连接攻击。两者都提供了丰富的HTTP服务功能,例如压缩、url rewrite、虚拟主机、SSL、proxy等等。

Nginx大量模仿了apache的设计风格,比如模块的定义、装配、以及配置数据的解析和组织方式等等。Lighttpd则是自己设计的一套。 和lighttpd相比,Nginx做事更加精细,它提供的一些比较特别。

Nginx的代码入手更困难一些(主观看法)。举个例子,Nginx内部的HTTP状态迁移是比较隐性的,它通过一系列的handler赋值来实现,如果 要完整地追踪一次HTTP请求的处理过程,比较费劲。这个就说明,一旦出了问题,追查比较困难。而lighttpd的代码中有一个显式的HTTP状态迁 移,一目了然,相比之下比较好看一些。

扩展模块开发方面,nginx的module模仿了apache的设计和实现方式,和lighttpd是完全不同的。主观感觉上nginx模块开发的入门门槛更高一些,因为必须弄清楚nginx的内部运行机制才好确认你写的代码到底有没有问题和隐患。

和lighttpd一样,nginx同样存在着开发文档很少的问题。最好的文档还是源码本身。

2. Nginx完全不支持动态库so,所以它的模块都必须静态编译,且不能动态加载。要加载哪些模块,模块按照怎样的顺序执行,都是在编译期由 configure指定的,如果要调整,也只能重新编译一遍,无法通过改配置来实现。在这方面,Lighttpd做得比nginx好。Lighttpd支 持动态so,并且可以在配置文件中调整各模块的先后顺序,在某些应用场景下,调整模块的先后顺序是很有用的。

条件配置语法的灵活性,lighttpd比nginx要好一些。

3. 根据简单性能对比,Nginx的性能比lighttpd略好

怎么样让各自用户的fastcgi进程为root用户启动的lighttpd服务

下面是我成功地配置Nginx + PHP5 FastCGI的过程

首先安装或编译Nginx

安装Nginx

源码包可以在官方主页上下载。Ubuntu 7.10可以直接通过apt安装,也可以从这里下载最新的deb包:

sudo apt-get install nginx

如果要自己编译的话,需要确保自己已经有编译器和PCRE的库(用于Nginx的rewrite模块,如果不需要这个模块可以在configure时使用./configure –without-rewrite),编译方法如下:

wget

tar zxvf nginx-0.5.34.tar.gz

cd nginx-0.5.34

./configure #默认配置安装路径为/usr/local/nginx 可以追加--prefix=/usr设置到/usr

make make install # install要求有root权限

Ubuntu安装之后的文件结构大致为:

所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下

程序文件在/usr/sbin/nginx

日志放在了/var/log/nginx中

并已经在/etc/init.d/下创建了启动脚本nginx

默认的虚拟主机的目录设置在了/var/www/nginx-default

而自己利用默认配置编译的,则放在/usr/local/nginx下,以下是目录结构:

/usr/local/nginx/conf 配置目录

/usr/local/nginx/html 默认的网站根目录

/usr/local/nginx/logs 日志和pid文件目录

/usr/local/nginx/sbin 执行文件目录

下面可以启动nginx来看看效果(请确保80端口没有其他服务在使用):

Ubuntu请运行:

sudo /etc/init.d/nginx start

其他请运行:

/usr/local/nginx/sbin/nginx

然后就可以通过来看看效果了。

要配置nginx的自动运行,可以将/usr/local/nginx/sbin/nginx添加到/etc/rc.local中,Ubuntu可以执行

update-rc.d nginx defaults

安装PHP5

至于如何在Linux上安装PHP,有很多文章,甚至很多平台上都有现成的软件包,无需自己编译。

PHP5的CGI方式的一大优势是内置了FastCGI的支持,只需指明绑定的地址和端口参数便可以以FastCGI的方式运行,如下:

php-cgi -b 127.0.0.1:9000

如何配置其与nginx一起运行呢?

配置Nginx的PHP FastCGI

请将以下内容保存为fastcgi_params文件,保存于/usr/local/nginx/conf下(Ubuntu可保存于/etc/nginx下),他为我们的FastCGI模块设置了基本的环境变量:

#fastcgi_params

fastcgi_param GATEWAY_INTERFACE CGI/1.1;

fastcgi_param SERVER_SOFTWARE nginx;

fastcgi_param QUERY_STRING $query_string;

fastcgi_param REQUEST_METHOD $request_method;

fastcgi_param CONTENT_TYPE $content_type;

fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;

fastcgi_param REQUEST_URI $request_uri;

fastcgi_param DOCUMENT_URI $document_uri;

fastcgi_param DOCUMENT_ROOT $document_root;

fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param REMOTE_ADDR $remote_addr;

fastcgi_param REMOTE_PORT $remote_port;

fastcgi_param SERVER_ADDR $server_addr;

fastcgi_param SERVER_PORT $server_port;

fastcgi_param SERVER_NAME $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect

fastcgi_param REDIRECT_STATUS 200;

请特别注意”fastcgi_script_name”一行,PHP-CGI特别需要此行信息来确定PHP文件的位置。

另外需要在PHP-CGI的配置文件(Ubuntu 上此配置文件位于/etc/php5/cgi/php.ini)中,打开cgi.fix_pathinfo选项:

cgi.fix_pathinfo=1;

这样php-cgi方能正常使用SCRIPT_FILENAME这个变量。

接下来在nginx的配置中针对php文件配置其利用FastCGI进程来执行:

server {

index index.php;

root /usr/local/nginx/html;

location ~ .*.php$ {

include /usr/local/nginx/conf/fastcgi_params; #请根据自己保存的路径进行设置

fastcgi_index index.php;

fastcgi_pass 127.0.0.1:9000; #请根据自己的FastCGI绑定的地址和端口进行配置

}

}

通知Nginx重新载入配置:

kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

Ubuntu用户可以使用init脚本:sudo /etc/init.d/nginx reload

然后启动php-cgi -b 127.0.0.1:9000

假设你在文档根目录放了index.php,并包含”phpinfo();”的内容,现在再看便应该能看到php的调试信息了。

配置php进程

直接使用php-cgi的FastCGI运行方式有两个问题(貌似应该有解决方案,如果知道的话可以教教我):

1.如果进程崩溃,难以配置重新启动

2.单进程的效率低

因此,我们可以利用Lighttpd的spawn-fcgi来控制进程的运行。获得spawn-fcgi的方法如下:

wget #获取Lighttpd的源码包

tar -xvjf lighttpd-1.4.18.tar.bz2

cd lighttpd-1.4.18

./configure #编译

make

cp src/spawn-fcgi /usr/local/bin/spawn-fcgi #取出spawn-fcgi的程序

下面我们就可以使用 spawn-fcgi 来控制php-cgi的FastCGI进程了

/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-cgi

参数含义如下

-f fcgiapp 指定调用FastCGI的进程的执行程序位置,根据系统上所装的PHP的情况具体设置

-a addr 绑定到地址addr

-p port 绑定到端口port

-s path 绑定到unix socket的路径path

-C childs 指定产生的FastCGI的进程数,默认为5(仅用于PHP)

-P path 指定产生的进程的PID文件路径

-u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,Ubuntu下可以使用www-data,其他的根据情况配置,如nobody、apache等

然后我们可以将这行代码加入到/etc/rc.local文件底部,这样系统启动的时候也可以同时启动PHP的FastCGI进程。

如何通过lighttpd 时间

1、 测试环境:

操作系统为REHL4,部署目标目录为/home/lighttpd;

2、 使用版本:

使用lighttpd1.4.19版;

3、 优化说明:

对etag头配置进行修改,,根据文件更新频繁程度,对不同的文件目录采用不同的expire策略;对于静态html/js/css文件均启用http压缩支持。主进程仅包含运行必须的模块,其他模块均排除,减少进程资源。

修改etag头是为了在集群环境中能够对相同的文件不用进行重复的请求,Lighttpd中可以通过设置etag.use-inode="disable",只设置mtime和size来解决这个问题,不过研发那边既然要求去掉Etag,那么就把Etag disable掉吧。(原来以为是可以将etag的输出disable掉的,但是如果同时启用了compress模块,会有问题,compress仍然会输出etag头,看了网上的一些文档,似乎可以通过hack手段修改源码来解决这个问题,但是没有时间去测试这个方法的稳定性,只得作罢。但是需要注意集群环境中文件的时间和大小需要一致)

4、 测试说明:

对大日志(超过2G的日志)、系统性能、Etag和expire头均进行过基本的测试;

关于压缩功能的测试,需要说明一点,lighttpd的compress模块只对超过一定大小的文件才启用压缩,这个具体的文件大小也没有找到相关的说明。

5、 部署拓扑:

使用四层交换机对客户的静态文件请求进行负载均衡调度,服务器之间用rsync来进行文件同步。

一、编译:

1、下载安装包:

安装mod cache需要打补丁,使用的lighttpd版本为lighttpd-1.4.19,对应的patch版本为lighttpd-1.4.19.modcache.v.1.4.4.patch (mod cache是一个类似于squid,可以通过lighttpd来实现squid的功能,考虑到将来的扩展和部署,可以在安装是将mod cache一并安装) 。

安装 mod cache需要gamin和pcre,也一并下载安装。按照下面的安装方式,所有的功能模块都是安装在同一个目录下面,这样便于整个备份和删除。

安装 mod cache 需要打补丁,需要一并下载。

《Lighttpd源码分析》epub下载在线阅读全文,求百度网盘云资源

《Lighttpd源码分析》(高群凯)电子书网盘下载免费在线阅读

链接:

提取码:RFDP  

书名:Lighttpd源码分析

作者:高群凯

出版社:机械工业出版社

出版年份:2010-3

页数:460

内容简介:

本书主要针对lighttpd源码进行了深度剖析。主要内容包括:lighttpd介绍与分析准备工作、lighttpd网络服务主模型、lighttpd数据结构、伸展树、日志系统、文件状态缓存器、配置信息加载、i/o多路复用技术模型、插件链、网络请求服务响应流程、请求响应数据快速传输方式,以及基本插件模块。本书针对的lighttpd项目版本为稳定版本1.4.20。

本书适合使用lighttpd的人员和爱好者参考。

编译lighttpd时提示没有lua.h

你指定了--with-lua 就是表明lighthttp要把lua编译进去,当然要有lua头文件和库文件。不过lua编译起来很简单的。或者你去掉--with-lua就可以了,不过也不支持lua了

发表评论

评论列表

  • 竹祭瑰颈(2022-06-10 12:08:10)回复取消回复

    进程仅包含运行必须的模块,其他模块均排除,减少进程资源。修改etag头是为了在集群环境中能够对相同的文件不用进行重复的请求,Lighttpd中可以通过设置etag.use-inode="disable",只设置mtime和size来解决这个问题,不过研发那边既然要求去掉Etag,那么

  • 痛言痴魂(2022-06-10 11:33:45)回复取消回复

    析和组织方式等等。Lighttpd则是自己设计的一套。 和lighttpd相比,Nginx做事更加精细,它提供的一些比较特别。 Nginx的代码入手更困难一些(主观看

  • 竹祭树雾(2022-06-10 06:53:37)回复取消回复

    /nginx日志放在了/var/log/nginx中并已经在/etc/init.d/下创建了启动脚本nginx默认的虚拟主机的目录设置在了/var/www/nginx-default而自己利用默认配置编译的,则放在/usr/loca

  • 弦久南简(2022-06-10 07:33:31)回复取消回复

    h你指定了--with-lua 就是表明lighthttp要把lua编译进去,当然要有lua头文件和库文件。不过lua编译起来很简单的。或者你去掉--with-lua就可以了,不过也不支持lua了