Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2068100
  • 博文数量: 178
  • 博客积分: 2076
  • 博客等级: 大尉
  • 技术积分: 2800
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-10 10:50
文章分类

全部博文(178)

文章存档

2010年(4)

2009年(13)

2008年(161)

我的朋友

分类: LINUX

2008-07-14 18:13:14

需要软件
Lighttpd
PHP4
EAccelerator

我目前的安装测试环境如下
Fedora core 3
MySQL 4.0.15a
CPU 赛阳 1.2G , RAM 384MB

由于是手动编译安装
因此请下载 tar.gz 格式的 source package
下载完之后 请放到 /usr/local/src

=================================================================================
第一步 : 先安装 Lighttpd
安装前的准备动作
首先要建立一个使用者来执行 lighttpd
可以下指令 useradd lighttpd
记得要把 /etc/passwd 的 lighttpd 这个 user 的shell从 /bin/bash 改成 /bin/nologin

开始安装 lighttpd
首先下指令 tar -xzf lighttpd-1.3.12.tar.gz , 把档案解开之后
下指令 cd lighttpd-1.3.12
然后要决定好 lighttpd 的安装位置
./configure --prefix=/usr/local/lighttpd
接着下 make , 如果 make 没问题 , 那就下达 make install 开始安装
安装成功之后 , 会发现LightHttpd 已经安装在 /usr/local/lighttpd

接着编写设定档 , 由于 lighttpd 不会帮你自动设定设定档 , 所以要自己写
或者把 /usr/local/src/lighttpd-1.3.12/doc 内的 lighttpd.conf 看看自己修改
这里提供一个设定范例 , 请各位下载本页的附件 , 有些许我加上的中文(big5)说明
然后请看每个批注 , 改成您需要的
PS : 附件中的设定文件范例有 Virtual Hosts , PHP , 网页压缩与 user_dir 的设定,对一般人来说应该足够

若要使用我提供的设定档
请在 /usr/local/lighttpd 下建立 conf 活页夹与 logs 活页夹
然后把 lighttpd.conf 放到 conf 活页夹下
接着再把附件中的 spawn-php.sh 放到 /usr/local/lighttpd/bin 活页夹下
接着请下指令 chown lighttpd.lighttpd /usr/local/lighttpd -Rf
PS: 附件中的 spawn-php.sh 是把 PHP with FastCGI 的环境变量初始化 , 内容各位也可以改

到这步骤应该是都可以了 , 但是请先别急
由于 PHP 还没安装 , 因此现在若启动 lighttpd 要测试会发生错误
所以接下来要安装 PHP with FastCGI

=================================================================================
第二步 : 安装 PHP with FAST CGI
把工作目录切换到 /usr/local/src
然后下指令解开 PHP
tar -xzf php-4.3.10.tar.gz
接着进入 php-4.3.10 (cd php-4.3.10)
开始下指令
./configure --prefix=/usr/local/php-fcgi --enable-fastcgi --with-=/usr/local/ --enable-zend-multibyte --with-config-file-path=/usr/local/php-fcgi/conf --enable-discard-path --enable-force-cgi-redirect

这部分若要加上其它 PHP 功能请自行加上参数
唯一与以前不同点是 , 编译成 fastcgi 模块 , 比需使用 --enable-fastcgi
以前与 apache2 一起编译是使用 --with-apxs2 , 此时不能再下这道指令

若没有问题 , 就执行 make 与 make install
这时候 PHP 会安装在 /usr/local/php-fcgi 这个活页夹了
然后在 /usr/local/php-fcgi 建立一个 conf 的活页夹
把 /usr/local/src/php-4.3.10 下的 php.ini-dist 复制到 /usr/local/php-fcgi/conf/php.ini
指令是 cp /usr/local/src/php-4.3.10/php.ini-dist /usr/local/php-fcgi/conf/php.ini

=================================================================================
第三步 : 安装 EAccelerator
把工作目录切换到 /usr/local/src
然后下指令解开 EAccelerator
tar -xzf eaccelerator-0.9.2a.tar.gz
接着进入 eaccelerator-0.9.2a 这个活页夹(cd eaccelerator-0.9.2a)
开始下指令
export PHP_PREFIX="/usr/local/php-fcgi"
$PHP_PREFIX/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
make
make install
EAccelerator 会安装在 /usr/local/php-fcgi/lib/php/extensions/no-debug-non-zts-XXXXXX 这个目录
上面目录后面的XXXXXX 要自己看喔(非常重要)

接着要编辑 /usr/local/php-fcgi/conf/php.ini
找到一行 cgi.fix_pathinfo
要写成 cgi.fix_pathinfo = 1
若没有这行 , 请自行加入就可

然后加入
extension="eaccelerator.so"
eaccelerator.shm_size="8"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
检查一下 extension_dir 这个设定是否如下
extension_dir = "/usr/local/php-fcgi/lib/php/extensions/no-debug-non-zts-XXXXXX/"
最后存档

=================================================================================
最后步骤 : 测试 lighttpd
lighttpd 我们是安装在 /usr/local/lighttpd
因此执行 /usr/local/lighttpd/sbin/lighttpd -f /usr/local/lighttpd/conf/lighttpd.conf
可以下 ps -aux 看看有没有许多 php 的行程
若有,那代表你成功了
你一定会烦..怎么那么多 php 程序啊 ?? 其实不要紧张
那些都是多执行绪 , 占用内存很小

如何关闭 lighttpd , 可以下指令 killall lighttpd , 这样就可以关闭
如何一开机启动 lighttpd ?
在 /etc/rc.d/rc.local 新增一行
/usr/local/lighttpd/sbin/lighttpd -f /usr/local/lighttpd/conf/lighttpd.conf
这样每次开机就会去启动了

如何测试效能 ???
若您之前有安装 apache with php
请先把 apache 用别的 port 来跑 , 例如 81
然后可以利用 apache 提供的 ab 来测试
例如 ab -c 10 -n 100 来测试 port 80
然后可以下 ab -c 10 -n 100 来测试 port 81
你会发现 lighttpd 跑的速度比 apache 快 50%~200% 以上喔 !!!!

==========================================================

讲解一下 , 为何用 lighttpd
1. 省内存 , 速度快
2. 使用 FastCGI 来与 PHP 做沟通 , 可以达到 chroot 的功能 , 不过范例中我没写上去 , 意思是每个用户有独立的读写权限 , 无法侵犯他人
3. lighttpd 的设定档虽然"目前"要自己写 , 可是其语法很容易理解

以下是我的测试效能
Lighttpd 的部分测试 phpMyAdmin
./ab -c 10 -n 100
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd,
Copyright (c) 1998-2002 The Apache Software Foundation,

Benchmarking 192.168.0.254 (be patient).....done

Server Software: lighttpd/1.3.12
Server Hostname: 192.168.0.254
Server Port: 80

Document Path: /~pigo/phpMyAdmin/index.php
Document Length: 2463 bytes

Concurrency Level: 10
Time taken for tests: 2.250865 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Non-2xx responses: 100
Total transferred: 267100 bytes
HTML transferred: 246300 bytes
Requests per second: 44.43 [#/sec] (mean)
Time per request: 225.086 [ms] (mean)
Time per request: 22.509 [ms] (mean, across all concurrent requests)
Transfer rate: 115.51 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 2 10.6 0 55
Processing: 19 86 106.9 21 706
Waiting: 19 85 106.5 20 704
Total: 19 89 112.5 21 751

Apache 2 的部分测试 phpMyAdmin
./ab -c 10 -n 100
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd,
Copyright (c) 1998-2002 The Apache Software Foundation,

Benchmarking 192.168.0.254 (be patient).....done

Server Software: Apache/2.0.52
Server Hostname: 192.168.0.254
Server Port: 81

Document Path: /~pigo/phpMyAdmin/index.php
Document Length: 2463 bytes

Concurrency Level: 10
Time taken for tests: 13.81193 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Non-2xx responses: 100
Total transferred: 278100 bytes
HTML transferred: 246300 bytes
Requests per second: 7.64 [#/sec] (mean)
Time per request: 1308.119 [ms] (mean)
Time per request: 130.812 [ms] (mean, across all concurrent requests)
Transfer rate: 20.72 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 39 155.1 0 918
Processing: 111 1141 1005.0 912 5239
Waiting: 10 1124 1008.6 911 5238
Total: 111 1181 1001.7 932 5239

原文地址:http://blog.sina.com.tw/archive.php?blog_id=3759&md=entry&id=9778
简体了一下,大陆人看着方便些。

发表于 @ 2007年10月20日 14:55:00|评论(0 )|编辑

 

 

lighttpd 轻量级WEB服务器

作者:tonyvicky
来自:LinuxSir.Org
摘要:lighttpd是一个轻量级的WEB服务器软件,支持CGI FASTCGI等
本文重点介绍lighttpd的CGI和FASTCGI模块的使用;

目录
一、关于测试环境
二、下载相关软件
三、安装和配置
1、安装lighttpd
2、配置lighttpd
3、设置CGI
4、设置FASTCGI
5、压力测试
四、关于本文

+-------------------------------------------+
| 正文 |
+-------------------------------------------+

一、关于测试环境

Ubuntu 5.10 , gcc4.0.2 , php5.1.1 , lighttpd 1.4.10
如果要测试FASTCGI在编译PHP时需要打开fastcgi的选项( --enable-fastcgi)

二、下载相关软件

lighttpd
php

三、安装和配置

1、安装lighttpd

root@tonyvicky:# tar vxzf lighttpd-1.4.10.tar.gz
root@tonyvicky:# cd lighttpd-1.4.10
root@tonyvicky:# ./configure --prefix=/usr/local/lighttpd
root@tonyvicky:# make
root@tonyvicky:# make install
root@tonyvicky:# mkdir /usr/local/lighttpd/htdocs
root@tonyvicky:# mkdir /usr/local/lighttpd/etc
root@tonyvicky:# cp ./doc/lighttpd.conf /usr/local/lighttpd/etc/
        

2、配置lighttpd
然后修改配置文件 /usr/local/lighttpd/etc/lighttpd.conf
把"mod_fastcgi"前边的#去掉(在24行);把"mod_cgi"前边的#去掉(在29行)
设置网站根目录 server.document-root = "/usr/local/lighttpd/htdocs/" (40行)
设置错误日志文件路径 server.errorlog = "/usr/local/lighttpd/lighttpd.error.log" (43行)
设置访问日志文件路径 accesslog.filename = "/usr/local/lighttpd/access.log" (116行)
启动服务器

root@tonyvicky:# cd /usr/local/lighttpd/sbin/
root@tonyvicky:# ./lighttpd -f ../etc/lighttpd.conf
        

如果出现错误请把配置文件中如下内容删除
$HTTP["url"] =~ "\.pdf$" {
server.range-requests = "disable"
}
        

3、配置CGI
修改配置文件
查找"#### CGI module"在这行之后添加
cgi.assign = ( ".sh" => "" )
        

然后我们再写一个shell脚本来作测试 test.sh
#!/bin/bash
echo "Content-Type: text/html";
echo "";
echo "test";
        

把这个文件保存到/usr/local/lighttpd/htdocs/下
并改变权限
root@tonyvicky:# chmod a+x test.sh
        

然后用浏览器访问一下
如果能出现"test"的字样,就说明CGI模块正常使用了

4、配置fastcgi
修改配置文件
查找"#### fastcgi module"在这行之后添加

fastcgi.server = ( ".php" =>
(( "socket" => "/tmp/php.socket",
"bin-path" => "/usr/local/php/bin/php",
"min-procs" => 1,
"max-procs" => 32,
"max-load-per-proc" => 4,
"idle-timeout" => 20
))
)
        

写一个PHP文件,看看能不能解析出来
// test.php
phpinfo();
?>
        

用浏览器访问一下
 
++++++++++++++++++++++++++++++++++++++

Lighttpd 配置与性能优化

 前提:还是针对高负载,静态页面,freebsd系统的web应用。 Ke-&E Ghp 
如果非要在LSWS(LiteSpeed Web Server)和lighttpd中间做的选择的话,我觉得是困难的。从现存的网上资料中很难有个权威的说法。因为测试没有特别的标准。例如在当前情况下,web server的配置是不是达到最优,甚至当你只对一中webserver测试的时候,你也会发现同种配置下连续测试,他们的结果都可能在波动。所以有时候很可能分不清哪种配置是最优秀的,适合当前情况。在这种情况下只能经过大量的反复的实验和观察。 
下面是LSWS官方网站的一个测试图,可以看出LSWS和lighttpd在keep alive情况下差不大,当然不排除他们对自己的web server的偏向,或则他们更熟悉自己的server彻底配置。

就使用的技术而言,lighttpd使用了Linux 2.6+使用epoll,而在FreeBSD上使用了kqueue。默认的都是poll,而我们的系统是freebsd,很不幸的是,当我在bsd上使用 kqueue特性时,测试的结果显示,效率明显变低。我没想明白为什么,c10k的文章我没有足够时间去读,可以做个参考。
For more infomation in this topic take a look at

再一个就是sendfile()技术,他能最小化应用程序所做的工作,直接把一个文件送到网卡。
在Linux 2.6+上使用sendfile64,可见现在好多小的httpd都对Linux 2.6+支持的很好,比如tux。

在针对我们的应用情况下,对配置文件进行一些修改。Time per request: 能达到0.65 [ms]左右相对于以前测的0.734[ms]左右,性能有很大提高。如果有大量的时间对每个性能指标进行测试,去掉不必要的模块和特性,应该在性能上还会有所提高,估计最好能到0.61[ms]左右。最近测试如下:
lighttpd 配置文件:去掉了很多不必要的特性。 J-mgEUci 
#######lighttpd.conf.
server.port           = 7983 ,
server.modules = ("mod_access") 
server.document-root         = "/usr/home/yangjian/lighttpd/doc/"
server.pid-file         = "/usr/home/yangjian/lighttpd/lighttpd.pid" 
mimetype.assign         = ( 
".html"       =>     "text/html",
".js"       =>     "text/javascript",
)

server.max-keep-alive-requests =4000
dir-listing.activate = "disable"

测试强度: ./ab -n 100000 -c 1000

 erver Software:     lighttpd/1.4.7 2
Server Hostname:     192.168.241.109

Server Port:         7983 k[4jjd6 

Document Path:       /index.html
Document Length:     449 bytes

Concurrency Level:     1000
Time taken for tests:   65.180092 seconds
Complete requests:     100000
Failed requests:     0
Write errors:       0
Total transferred:     68281158 bytes
HTML transferred:     44953431 bytes
Requests per second:   1534.21 [#/sec] (mean)
Time per request:     651.801 [ms]cpx 
Time per request:     0.652 [ms] (mean, across all concurrent requests) 
Transfer rate:       1023.01 [Kbytes/sec] received


LiteSpeed的测试都是在默认配置下。它的结果不太稳定,最好的记录是0.603ms,这是lighttpd所没有过的好成绩,但大多数情况下都在 0.70左右,有好多次在0.76以上。我这里说的都是LiteSpeed的标准版,pro版是要花钱的性能当然要好些。LiteSpeed是同过web 管理的,这是它的一个比较好的特性。如果经过优化我想它和lighttpd应该还是不差上下的。
8 'D]i 
我暂时先选择相对稳定点的lighttpd作为我们的web server,然后对它的配置和优化进行说明。Lighttpd配置文件很简单,相信大家配过apache的都能看明白。我就只对影响性能的指标挑出来讨论。参考文章http://www.lighttpd.net/documentation
]T Bi8 
可以看出我上面的那个配置文件非常简短。我去掉了所有不必要的特性。添加的模块只有mod_access,如果没有它访问是就会出现403错误。除了它之外系统默认启用的模块有
mod_indexfiles ,mod_dirlisting, mod_staticfile。但在默认已经编译进去的模块清单如下: ZBFxS p 
对于这些已经编译进去的在启用时就非常简单了,enable一下就ok了。Lighttpd想添加一个功能一般情况下只需要添加一两行指令到配置文件中,比apache易配置多了。
Plugins:
enabled:
mod_access  
mod_accesslog
mod_alias  
mod_auth
mod_cgi
mod_compress
mod_dirlisting
mod_evhost
mod_expire
mod_fastcgi  
mod_indexfiles
mod_proxy
mod_rrdtool
mod_scgi
mod_secdownload
mod_setenv
mod_simple_vhost
mod_staticfile
mod_status
mod_userdir
mod_usertrack
mod_webdav
disabled:
mod_cml
mod_mysql_vhost
mod_redirect
mod_rewrite

Features:
enabled: ;
auth-crypt
compress-bzip2
compress-deflate
compress-gzip
large-files
network-ipv6
disabled:
auth-ldap
network-openssl
regex-conditionals
stat-cache-fam 1
storage-gdbm 9
storage-memcache
webdav-properties
每个模块的作用和我上次写的apache的性能优化中提到的大同小异。所以我想如果只保留核心功能,性能应该会提升一些的。配置选项:
server.chroot
使用chroot提高安全性时,web服务器的root目录。建议使用

server.username = "..." server.groupname = "..."
放弃root权限。 {

dir-listing.activate {
如果没有找到index文件就列出目录。建议disable。
 
server.event-handler  
设置时间处理方式。Default: "poll"。Bsd上默认就可以,使用kqueue反而影响了效率。原因不明。以下是各种操作系统对应的方式: 
OS Method Config-Value *w                 
all select select
Unix poll poll
Linux 2.4+ rt-signals linux-rtsig
Linux 2.6+ epoll linux-sysepoll
Solaris /dev/poll solaris-devpoll
FreeBSD, ... kqueue freebsd-kqueue
server.max-request-size
maximum size in kbytes of the request (header + body)
Default: 2Gb 

server.max-worker
lighttpd默认只启动一个进程工作,但也支持apache那样启动多个进程,我的实验显示启动多个进程同时工作时并不能提高性能。

server.max-keep-alive-requests
这一条比较关键,对性能的影响比较大。在一个keep-alive会话终止连接前能接受处理的最大请求数。Default: 128,对一个高负载的应用来说是不够的。我用了4000。
fb4q79m1u 
server.max-keep-alive-idle
一个空闲keep-alive连接被丢弃前,存在的的最大秒数。Default: 30。


页面找不到时候的处理,对性能没什么影响,指出来一下,例如:


server.max-fds
因为lighttpd是一个单线程(single-threaded)服务器,它的主要资源限制是文件描述符数目,默认值是1024。如果在一个高负载的站点上,可能你需要通过下面的设定增加这个限定值
server.max-fds = 2048 但这个限定只有在lighttpd做为root身份运行时才能生效。

onnection.kbytes-per-second,server.kbytes-per-second

还有值得一提的时lighttpd可以限制每个连接或则特定虚拟机的流量。

compress.cache-dir,compress.filetype
如果文本稍微大点可以考虑使用压缩算法,减少带宽同时也能提高效率。例如:
compress.cache-dir = "/var/www/cache/"
compress.filetype = ("text/plain", "text/html")

server.stat-cache-engine = "fam" 
这一条能明显提升性能,stat() cache。一个stat调用代价可能是昂贵的。为它设一个cache能省时间又避免上下文切换。替代每次都stat()来确定文件的存在,它只stat ()一次,然后会监视目录,如果目录不变,他里面的文件也就没有变化。我们的内存文件系统中有没必要保留,依情况而定。
server.stat-cache-engine = "fam"   # either fam, simple or disabled

在FreeBSD上可能提升一些性能同过 启用accept-filters仅仅编译你的内核用下面选项:options   ACCEPT_FILTER_HTTP
先写这么多,以后随着lighttpd应用再对内容进行丰富。

阅读(1650) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~