以下学习的modules:
mod_userdir
mod_auth
mod_status
mod_proxy
mod_webdav
 
一、用户主页配置
例:给用户lyy建立个人主页
1)修改modules.conf ,将userdir.conf前的注释取消
[root@web ~]# vim /etc/lighttpd/modules.conf
## mod_userdir
##
include "conf.d/userdir.conf“
2)将conf.d/userdir.conf修改以下内容
[root@web ~]# vim /etc/lighttpd/conf.d/userdir.conf
userdir.path = "public_html"
3)在lyy用户家目录建立public_html,确保其他用户对lyy家目录有x权限
[root@web ~]# mkdir /home/lyy/public_html
[root@web ~]# chmod o+x /home/lyy/
4)在目录public_html建立测试页面或把你的网页放到这个目录。在浏览器中输入:http://web服务器IP或FQDN/~用户/
用户主页
PS:修改完成后记得重启服务。
如果想在输入地址时,不需要用~,可通过以下方法去掉~:
[root@web ~]# ln -s /home/lyy/public_html/ /srv/www/htdocs/lyy
二、用户认证配置
1)将mod_auth行前的注释取消
[root@web ~]# vim /etc/lighttpd/modules.conf
server.modules = (
"mod_access",
# "mod_alias",
"mod_auth",
# "mod_evasive",
"mod_redirect",
"mod_rewrite",
# "mod_setenv",
# "mod_usertrack",
)
2)生成密码文件。基本身份验证的认证用户来源可以是普通文本文件、htpasswd工具生成的密码文件等。
[root@web lighttpd]# htpasswd -cm /etc/lighttpd/webuser
3)在auth.conf中增加以下内容:
[root@web ~]# vim /etc/lighttpd/conf.d/auth.conf
  1. auth.backend = "plain" 
  2. auth.debug = 2 
  3. auth.backend.plain.userfile = "/etc/lighttpd/webuser" 
  4. auth.require = ( "/test/" => 
  5.  "method" => "basic", 
  6.  "realm" => "Test Web", 
  7.  "require" => "valid-user" 
  8. ), 
1.密码文件保存方式为pain普通文本文件。
2.设置调试级别(0是关闭调试信息,1是认证成功信息,2是更详细的调试信息),信息被记录在 access.log和error.log日志文件中
3.密码文件保存路径
4.指定要进行认证目录,/是相对路径为网站根目录,这里为根目录下的test目录。
6.使用基本身份认证
7.用户认证界面提示信息
8.匹配密码文件中的用户
以上是按官方的文档操作,但在我的系统中怎么折腾都没成功。让朋友按这个步骤测试,是成功的,很奇怪,找不到原因。我就改成了以下方法:
1)在modules.conf的配置
server.modules = (
"mod_access",
# "mod_alias",
# "mod_auth",
...
2)不去掉注释,加入以下
## mod_auth
##
include "conf.d/auth.conf"
在auth.conf中加入
  1. server.modules += ( "mod_auth" ) 
  2. auth.debug                   = 2 
  3. auth.backend                 = "plain" 
  4. auth.backend.plain.userfile  = "/etc/lighttpd/webuser" 
  5. auth.require               = ( "/test/" => 
  6.                                ( 
  7.                                  "method"  => "basic", 
  8.                                  "realm"   => "Test Web", 
  9.                                  "require" => "valid-user" 
  10.                                ), 
  11.                              ) 
3.测试
用户认证
三、虚拟主机设定
常规虚拟主机设定简单,可以不需要任何模块支持,直接在lighttpd.conf文件定义
1.基本IP
  1. $HTTP["host"] == "192.168.209.129" { 
  2. server.document-root = "/srv/www/htdocs/web1" 
  3. server.errorlog = "/var/log/lighttpd/web1-error.log" 
  4. accesslog_filename = "/var/log/lighttpd/web1-access.log" 
web1
2.基于端口
  1. $SERVER["socket"]=="192.168.209.129:8080"{ 
  2. server.document-root = "/var/www/htdocs/web2/" 
  3. server.errorlog = "/var/log/lighttpd/web2.log" 
  4. accesslog.filename ="/var/log/lighttpd/web2-access.log" 
web2
3.基于主机头
  1. $HTTP["host"] == "web3.example.com" { 
  2. server.document-root = "/var/www/htdocs/web3/" 
  3. server.errorlog = "/var/log/lighttpd/web3.log" 
  4. accesslog.filename ="/var/log/lighttpd/web3-access.log" 
web3
四、服务状态监控
1)将mod_status配置文件的注释取消
## mod_status
##
include "conf.d/status.conf"
2)修改status.conf允许监控的IP段或单个IP
[root@web ~]# vim /etc/lighttpd/conf.d/status.conf
$HTTP["remoteip"] == "192.168.209.0/24" {
3)重启服务后,打开http://ip/server-status
监控
server-status是状态监控
server-config是配置查看
这个功能默认只要ip允许,就可以查看。如果觉得不安全,可以配合mod_auth做只允许通过验证的用户访问。
五、代理缓存
lighttpd的代理模块,在配置文件中主要有3个选项:
proxy.debug: 代理模块调试级别。目前可使用的参数只有0和1,分别代表启用和禁用.
proxy.balance:使用负载均衡的模式。可以使“hash”,“round-robin”,”fair”三种模式之一。
round-robin 替轮训,
hash 根据请求的url产生一个 hash值,来确保同样的请求的url都访问同样的主机
fair 正常的负载,被动平衡(默认)
proxy.server:把指定的扩展名程序发给特定的服务器处理。
语法结构
  1. <extension> =>  
  2.      ( [ <name> => ] 
  3.        ( "host" => <string> , 
  4.          "port" => <integer> ), 
  5.        ( "host" => <string> , 
  6.          "port" => <integer> ) 
  7.      ), 
  8.      <extension> => …  
  9.    ) 

<extension>: 表示请求url的文件扩展名或者文件前缀 (如果以”/”开始); 可以是空 (“”) 表示所有的请求
<name> : 可选名称
“host”: 被代理的服务器的ip,不能使用域名
“port”: 被代理服务器的端口,默认是80
例1:将java的请求全都转向给resin来处理
1)将mod_proxy配置文件的注释取消
## mod_proxy
##
include "conf.d/proxy.conf
2)修改proxy.conf 
  1. proxy.server = ( ".jsp" => 
  2.                  ( "resin" => 
  3.                    ( 
  4.                      "host" => "192.168.209.129", 
  5.                      "port" => 8080 
  6.                    ) 
  7.                  ) 
  8.                ) 

3)将resin的web主目录修改和lighttpd相同
[root@web ~]# vim /usr/local/resin/conf/resin.xml
<web-app id="/" root-directory="/srv/www/htdocs"/>
4)分别重启lighttpd和resin,在/srv/www/htdocs目录下建立test.jsp
[root@web ~]# vim /srv/www/htdocs/test.jsp
<%@page language="java"%>
100+200=<%=100+200%>
浏览器打开http://ip/test.jsp
jsp
例2:lighttpd在前端做负载均衡,有5个squid做缓存,当一个服务器宕机后,请求转移给其他server。
  1. $HTTP["host"] == "www.example.com" { 
  2.   proxy.balance = "hash"  
  3.   proxy.server  = ( "" => ( ( "host" => "10.0.0.10" ), 
  4.                             ( "host" => "10.0.0.11" ), 
  5.                             ( "host" => "10.0.0.12" ), 
  6.                             ( "host" => "10.0.0.13" ), 
  7.                             ( "host" => "10.0.0.14" ) ) ) 
 
六、WebDAV
WebDAV使应用程序可直接对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。启用webdav功能需要sqlite3和libxml2软件包,在编译时加上--with-webdav-props参数,锁定和解锁功能加上--with-webdav-locks参数。
1)修改modules.conf,去掉注释
include "conf.d/webdav.conf"
2)修改conf.d/webdav.conf,加入以下内容
  1. $HTTP["url"] =~ "^/dav($|/)" { 
  2.    webdav.activate = "enable"       #允许webdav 
  3.    webdav.is-readonly = "enable"    #只读 
  4.    webdav.sqlite-db-name =  var.log_root + "/webdav.db" 
  5. auth.backend                 = "plain" 
  6. auth.backend.plain.userfile  = "/etc/lighttpd/webuser" 
  7. auth.require               = ( "/dav/" => 
  8.                                ( 
  9.                                  "method"  => "basic", 
  10.                                  "realm"   => "Access DAV", 
  11.                                  "require" => "valid-user" 
  12.                                ), 
  13.                              ) 
注:WebDAV访问验证需要开启mod_auth,否则验证无法生效。
3)客户端测试,使用cadaver
  1. [root@server ~]# cadaver http://192.168.209.129/dav 
  2. Authentication required for Access DAV on server `192.168.209.129': 
  3. Username: test 
  4. Password:  
  5. dav:/dav/> ls 
  6. Listing collection `/dav/': succeeded. 
  7.         web.tar.gz                         88903   4月 12  2012 
  8. dav:/dav/> get web.tar.gz 
  9. Downloading `/dav/web.tar.gz' to web.tar.gz: 
  10. Progress: [=============================>] 100.0% of 88903 bytes succeeded. 
  11. dav:/dav/> put /root/test.tar.gz 
  12. Uploading /root/test.tar.gz to `/dav/test.tar.gz': 
  13. Progress: [=============================>] 100.0% of 345 bytes failed: 
  14. 403 Forbidden 
  15. dav:/dav/>  
4)学习过程中遇到的问题:
错误1:
Sorry, no sqlite3 and libxml2 support include, compile with --with-webdav-props
解决:sqlite3和libxml2软件包,重新编译加上--with-webdav-props参数。
错误2:
(mod_webdav.c.207) sqlite3_open failed for /etc/lighttpd/webdav.db unable to open database file
(server.c.945) Configuration of plugins failed. Going down.
解决:lighttpd服务是使用lighttpd用户启动的,在生成webdav.db时需要有保存db文件所在目录的写权限。
lighttpd参数:
#/usr/local/lighttpd/sbin/lighttpd –help
-f <name> 指定配置文件的路径
-m <name> 指定模块的加载目录,默认是/usr/local/lighttpd/lib
-p        在屏幕上显示解析后的配置文件信息(运行信息),要指定-f参数
-t        检测配置文件的正确行,要指定-f参数
-D        设置lighttpd非后台运行,默认是后台运行
-v        显示lighttpd的版本
-V        显示lighttpd的编译时特性信息
-h        显示帮助信息,同–help
 
参考文章:http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ConfigurationOptions