Related Posts Plugin for WordPress, Blogger...

1、前言

lighttpd - secure, fast, compliant, and very flexible web-server 為輕量級 Web Server,設計目的以安全、快速、小巧、兼容為主設計而來,使用很多輕巧且靈活的特色 ((FastCGI, CGI, Auth, Output-Compression, URL-Rewriting...)來處理 Web Server 的需求。(請尊重 Weithenn 的辛勞!!)

文章目錄

1、前言
2、實作環境
3、安裝及設定
          步驟1.安裝 lighttpd 套件
          步驟2.安裝 PHP5 及 lighttpd-fastcgi 套件
          步驟3.修改 lighttpd 設定檔
          步驟4.設定開機自動啟動 lighttpd 服務
          步驟5.啟動 lighttpd 服務
4、補充:支援 RRDTool Module
          rrdtool.sh:指定產生流量分析圖檔的路徑及 rrd-database file 路徑
          lightygraph.cgi:指定去暫存流量分析圖檔路徑及 rrd-database file 路徑
5、參考
6、Me FAQ
          Q1./usr/lib/lighttpd/mod_fastcgi.so: cannot open shared object file: No such file or directory?
          Q2./usr/lib/lighttpd/mod_fastcgi.so: undefined symbol: ap_user_id?
          Q3./var/run/lighttpd/php-fastcgi.socket-0 No such file or directory?
          Q4.ERROR: creating '/var/lib/lighttpd/lighttpd.rrd': Permission denied?
          Q5.裝完 lighttpd 後打 top 發現 prelink 佔用 CPU 97 %?
          Q6.$HTTP"referer" 功能似乎失效,無法禁止整個網站圖檔盜連?

2、實作環境

  • CentOS 5.1 (Linux 2.6.18-53.1.4.el5)
  • lighttpd-1.4.18-1.el5.rf
  • lighttpd-fastcgi-1.4.18-1.el5.rf (支援 PHP)

3、安裝及設定

步驟1.安裝 lighttpd 套件

鍵入如下指令以安裝 lighttpd 套件。
#yum -y install lighttpd    
查詢 lighttpd 版本。
#rpm -qa lighttpd              
 lighttpd-1.4.18-1.el5.rf


步驟2.安裝 PHP5 及 lighttpd-fastcgi 套件

安裝 PHP5 及 lighttpd-fastcgi 套件。(請尊重 Weithenn 的辛勞!!)
#yum -y install php lighttpd-fastcgi
查尋 PHP5 及 lighttpd-fastcgi 版本。
#rpm -qa php lighttpd-fastcgi
 lighttpd-fastcgi-1.4.18-1.el5.rf
 php-5.1.6-15.el5


步驟3.修改 lighttpd 設定檔

修改 lighttpd 設定檔,更改網站根目錄位置。
#vi /etc/lighttpd/lighttpd.conf
 server.document-root        = "/srv/www/lighttpd/"   //預設值
 server.document-root        = "/home/web/"           //修改後


步驟3-1.支援 PHP (FastCGI)

#vim /etc/lighttpd/lighttpd.conf
 server.modules = (
                   "mod_fastcgi",   //這行註解拿掉(支援 PHP-FastCGI)
                  )
#### fastcgi module
## read fastcgi.txt for more info
## for PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini
 fastcgi.server = ( ".php" =>
                   ( "localhost" =>
                    (
                     #"socket" => "/var/run/lighttpd/php-fastcgi.socket", //預設值
                      "socket" => "/tmp/php-fastcgi.socket",              //修改後
                                   "bin-path" => "/usr/bin/php-cgi"
                     )
                    )
                   )


步驟3-2.支援 Perl (CGI Module)

#vi /usr/local/etc/lighttpd.conf
 server.modules = (
                   "mod_cgi",   //取消此行註解(以支援 CGI Module)
                  )
#### CGI module
 cgi.assign     = ( ".pl"  => "/usr/bin/perl",
                    ".cgi" => "/usr/bin/perl" )


步驟3-3.支援 Rewrite Module

我使用 $HTTP"referer" 來阻擋被盜圖,以下設定是整個網站只要附檔名是 .jpg、.jpeg、.png、.gif 都是網頁可以正常顯示,但你若直接打圖檔的網址則會得到 403 - Forbidden 拒絕存取的訊息,當然若是想要適度的開放可以配合 $HTTP"url" 設定即可。
#vi /usr/local/etc/lighttpd.conf
 server.modules = (
                   "mod_rewrite",   //取消此行註解(支援 rewrite Module)
                   "mod_access",    //取消此行註解(支援 access Module)
                  )
#### deny access the file-extensions
 $HTTP"referer" !~ "^http://www\.weithenn\.org" {
     url.access-deny = ( ".jpg", ".jpeg", ".png", ".gif" )
 }

若是要適度的禁止,例如我只想禁止存取 http://www.weithenn.org/images/ 下所有的圖檔,而其他資料夾若有圖檔是開放存取的你可以改成如下:
 $HTTP"referer" !~ "^http://www\.weithenn\.org" {
     $HTTP"url" =~ "^/images/" {
     url.access-deny = ( ".jpg", ".jpeg", ".png", ".gif" )
     }
 }


步驟3-4.支援 Using Authentication - Methods digest

詳細內容可參考 Docs:ModAuth - lighttpd - Trac
#vi /etc/lighttpd/lighttpd.conf
 server.modules = (
                   "mod_auth",      //取消此行註解(支援 Auth Module)
                  )
#### auth module
 auth.backend = "htdigest"          //使用username,realm,md5 password backend
 auth.backend.htdigest.userfile = "/home/web/.lighttpdpwd" //指定身份認證檔存放路徑
 auth.require = ( "/lightsquid" =>  //指定需要身份認證的網頁路徑
                 (
                  "method"  => "digest",     //指定認證方式
                  "realm"   => "Authentication LightSquid Login", //認證視窗說明文字
                  "require" => "valid-user"  //.lighttpdpwd內定義的認證使用者
                  )
                 )

htdigest.sh 內容如下:使用 hash 加上 md5sum 指令來建立密碼檔 (不用安裝 apache mod_auth_digest)。
#!/bin/sh
 user=$1
 realm=$2
 pass=$3
 hash=`echo -n "$user:$realm:$pass" | /usr/bin/md5sum | cut -b -32`
 echo "$user:$realm:$hash"

使用 htdigest.sh 來建立認證密碼檔案及設定使用者帳號密碼,輸入順序為使用者帳號(User)、認證視窗說明文字(realm)、使用者密碼(password-hash),下面指令就是這三者輸出字串寫入到我們的認證密碼檔案內。所以若是要新增第二個使用者記得使用 >> 來導入不然會把認證密碼檔案內容全部覆蓋掉。
#sh htdigest.sh 'weithenn' 'Authentication LightSquid Login' '111' > /home/web/.lighttpdpwd

步驟4.設定開機自動啟動 lighttpd 服務

使用 chkconfig 指令來查看 lighttpd 在各 runlevel 下狀態。
#chkconfig --list |grep lighttpd
 lighttpd        0:off   1:off   2:off   3:off   4:off   5:off   6:off

設定 lighttpd 在 runlevel 為 2、3、5 時會啟動服務。
#chkconfig --levels 235 lighttpd on     
檢查剛才的設定是否生效。
#chkconfig --list |grep lighttpd
 lighttpd        0:off   1:off   2:on    3:on    4:off   5:on    6:off


步驟5.啟動 lighttpd 服務

#/etc/rc.d/init.d/lighttpd start
 Starting lighttpd:                                           [OK]  

檢查一下 lighttpd process 是否執行。
#ps ax |grep lighttpd
 4266 ?        S      0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf

檢查是否 LISTEN Port 80。(請尊重 Weithenn 的辛勞!!)
#netstat -tnl |grep :80
 tcp        0      0 0.0.0.0:80          0.0.0.0:*               LISTEN


4、補充:支援 RRDTool Module

lighttpd 內建支援 rrdtool module 所以你可以很方便的來畫出網站的流量圖 (Traffic) 及回應時間圖 (Request),前提是安裝 rrdtool 套件及設定 lighttpd.conf 把 mod_rrdtool 載入即可。請參考下列網址:

首先必須安裝 rrdtool 套件。(請尊重 Weithenn 的辛勞!!)
#yum -y install rrdtool
建立放置 rrdtool 流量圖檔資料夾及存放 rrd-database 資料夾,且更改權限讓 lighttpd 可寫入否則將會發生 Permission denied 的問題。
#mkdir /home/web/rrdtool            //屆時存放流量圖檔資料夾
#mkdir /var/lib/lighttpd            //存放 rrd-database 資料夾
#chown lighttpd /home/web/rrdtool  //否則 lighttpd 無法更新圖檔
#chown lighttpd /var/lib/lighttpd  //否則 lighttpd 無法產生 rrd-database

修改 lighttpd.conf 設定檔。
#vi /etc/lighttpd/lighttpd.conf
 "mod_rrdtool",                                       //取消此行註解
#### rrdtool
 rrdtool.binary    = "/usr/bin/rrdtool"               //取消此行註解
 rrdtool.db-name   = "/var/lib/lighttpd/lighttpd.rrd" //
取消此行註解
重新啟動 lighttpd 服務 (此時會產生 rrd-database file 也就是 lighttpd.rrd),若未產生此檔可能就是剛才 /var/lib/lighttpd 權限設定有問題或查看 /var/log/lighttpd/error.log 了解哪裡出問題,此檔一定要產生成功否則後面圖檔便畫不出來了。
#/etc/rc.d/init.d/lighttpd restart
 Stopping lighttpd:                        [OK]
 Starting lighttpd:                        [OK]  

編輯 rrdtool.sh 及下載 lightygraph.cgi 此二個檔案內容取自 Docs:ModRRDTool - lighttpd - secure, fast, compliant, and very flexible web-server - Trac

rrdtool.sh:指定產生流量分析圖檔的路徑及 rrd-database file 路徑

編輯 rrdtool.sh 設定檔內容。
#vi /etc/lighttpd/rrdtool.sh                  
#!/bin/sh
 RRDTOOL=/usr/bin/rrdtool
 OUTDIR=/home/web/rrdtool              //指定產生圖檔的路徑
 INFILE=/var/lib/lighttpd/lighttpd.rrd //指定 rrd-database file 路徑
 OUTPRE=lighttpd-traffic
 WIDTH=600
 HEIGHT=350
 DISP="-v bytes --title TrafficWebserver \
        DEF:binraw=$INFILE:InOctets:AVERAGE \
        DEF:binmaxraw=$INFILE:InOctets:MAX \
        DEF:binminraw=$INFILE:InOctets:MIN \
        DEF:bout=$INFILE:OutOctets:AVERAGE \
        DEF:boutmax=$INFILE:OutOctets:MAX \
        DEF:boutmin=$INFILE:OutOctets:MIN \
        CDEF:bin=binraw,-1,* \
        CDEF:binmax=binmaxraw,-1,* \
        CDEF:binmin=binminraw,-1,* \
        CDEF:binminmax=binmaxraw,binminraw,- \
        CDEF:boutminmax=boutmax,boutmin,- \
        AREA:binmin#ffffff: \
        STACK:binmax#f00000: \
        LINE1:binmin#a0a0a0: \
        LINE1:binmax#a0a0a0: \
        LINE2:bin#efb71d:incoming \
        GPRINT:bin:MIN:%.2lf \
        GPRINT:bin:AVERAGE:%.2lf \
        GPRINT:bin:MAX:%.2lf \
        AREA:boutmin#ffffff: \
        STACK:boutminmax#00f000: \
        LINE1:boutmin#a0a0a0: \
        LINE1:boutmax#a0a0a0: \
        LINE2:bout#a0a735:outgoing \
        GPRINT:bout:MIN:%.2lf \
        GPRINT:bout:AVERAGE:%.2lf \
        GPRINT:bout:MAX:%.2lf \
        "
 $RRDTOOL graph $OUTDIR/$OUTPRE-hour.png -a PNG --start -14400 $DISP -w $WIDTH -h $HEIGHT
 $RRDTOOL graph $OUTDIR/$OUTPRE-day.png -a PNG --start -86400 $DISP -w $WIDTH -h $HEIGHT
 $RRDTOOL graph $OUTDIR/$OUTPRE-month.png -a PNG --start -2592000 $DISP -w $WIDTH -h $HEIGHT
 OUTPRE=lighttpd-requests
 DISP="-v req --title RequestsperSecond -u 1 \
        DEF:req=$INFILE:Requests:AVERAGE \
        DEF:reqmax=$INFILE:Requests:MAX \
        DEF:reqmin=$INFILE:Requests:MIN \
        CDEF:reqminmax=reqmax,reqmin,- \
        AREA:reqmin#ffffff: \
        STACK:reqminmax#00f000: \
        LINE1:reqmin#a0a0a0: \
        LINE1:reqmax#a0a0a0: \
        LINE2:req#00a735:requests"
 $RRDTOOL graph $OUTDIR/$OUTPRE-hour.png -a PNG --start -14400 $DISP -w $WIDTH -h $HEIGHT
 $RRDTOOL graph $OUTDIR/$OUTPRE-day.png -a PNG --start -86400 $DISP -w $WIDTH -h $HEIGHT
 $RRDTOOL graph $OUTDIR/$OUTPRE-month.png -a PNG --start -2592000 $DISP -w $WIDTH -h $HEIGHT


lightygraph.cgi:指定去暫存流量分析圖檔路徑及 rrd-database file 路徑

編輯 lightygraph.cgi 設定檔內容。
#vi /home/web/rrdtool/lightygraph.cgi          
#!/usr/bin/perl -w
# lightygraph -- a lighttpd statistics rrdtool frontend
# copyright (c) 2008 Joe Nahmias <joe@nahmias.net>
# based on mailgraph by David Schweikert <dws@ee.ethz.ch>
# released under the GNU General Public License
 use RRDs;
 use POSIX qw(uname);
 my $VERSION = "0.50";
 my $host = (POSIX::uname())1;
 my $scriptname = 'lightygraph';
 my $xpoints = 600;
 my $ypoints = 350;
 my $rrd = '/var/lib/lighttpd/lighttpd.rrd'; //指定 rrd-database file 路徑
 my $tmp_dir = '/home/web/rrdtool';          //指定暫存分析圖檔路徑
 my @graphs = (
        { title => 'Last 4 Hours',   seconds => 60 * 60 *  4     ,   },
        { title => 'Daily Graphs',   seconds => 60 * 60 * 24     ,   },
        { title => 'Monthly Graphs', seconds => 60 * 60 * 24 * 30,   },
 );
 my %color = (       # rrggbb in hex
        areamin     => 'ffffff',
        instack     => 'f00000',
        minmax      => 'a0a0a0',
        incoming    => 'efb71d',
        outstack    => '00f000',
        outgoing    => 'a0a735',
        reqstack    => '00f000',
        requests    => '00a735',
 );
 sub rrd_graph(@)
 {
        my ($range, $file, $ypoints, @rrdargs) = @_;
      # choose carefully the end otherwise rrd will maybe pick the wrong RRA:
        my $date = localtime(time);
        $date =~ s|:|\\:|g unless $RRDs::VERSION < 1.199908;
        my ($graphret,$xs,$ys) = RRDs::graph($file,
                '--imgformat', 'PNG',
                '--width', $xpoints,
                '--height', $ypoints,
                '--start', "-$range",
                '--lazy',
                @rrdargs,
                'COMMENT:'.$date.'\r',
        );
        my $ERR=RRDs::error;
        die "ERROR: $ERR\n" if $ERR;
 }
 sub graph_traffic($$)
 {
        my ($range, $file) = @_;
        rrd_graph($range, $file, $ypoints,
            "-v bytes",
            "-t TrafficWebserver",
            "DEF:binraw=$rrd:InOctets:AVERAGE",
            "DEF:binmaxraw=$rrd:InOctets:MAX",
            "DEF:binminraw=$rrd:InOctets:MIN",
            "DEF:bout=$rrd:OutOctets:AVERAGE",
            "DEF:boutmax=$rrd:OutOctets:MAX",
            "DEF:boutmin=$rrd:OutOctets:MIN",
            "CDEF:bin=binraw,-1,*",
            "CDEF:binmax=binmaxraw,-1,*",
            "CDEF:binmin=binminraw,-1,*",
            "CDEF:binminmax=binmaxraw,binminraw,-",
            "CDEF:boutminmax=boutmax,boutmin,-",
            "AREA:binmin#$color{areamin}:",
            "STACK:binmax#$color{instack}:",
            "LINE1:binmin#$color{minmax}:",
            "LINE1:binmax#$color{minmax}:",
            "LINE2:bin#$color{incoming}:incoming",
            "GPRINT:bin:MIN:%.2lf",
            "GPRINT:bin:AVERAGE:%.2lf",
            "GPRINT:bin:MAX:%.2lf",
            "AREA:boutmin#$color{areamin}:",
            "STACK:boutminmax#$color{outstack}:",
            "LINE1:boutmin#$color{minmax}:",
            "LINE1:boutmax#$color{minmax}:",
            "LINE2:bout#$color{outgoing}:outgoing",
            "GPRINT:bout:MIN:%.2lf",
            "GPRINT:bout:AVERAGE:%.2lf",
            "GPRINT:bout:MAX:%.2lf",
        );
 }
 sub graph_requests($$)
 {
        my ($range, $file) = @_;
        rrd_graph($range, $file, $ypoints,
            "-v req",
            "-t RequestsperSecond",
            "-u 1",
            "DEF:req=$rrd:Requests:AVERAGE",
            "DEF:reqmax=$rrd:Requests:MAX",
            "DEF:reqmin=$rrd:Requests:MIN",
            "CDEF:reqminmax=reqmax,reqmin,-",
            "AREA:reqmin#$color{areamin}:",
            "STACK:reqminmax#$color{reqstack}:",
            "LINE1:reqmin#$color{minmax}:",
            "LINE1:reqmax#$color{minmax}:",
            "LINE2:req#$color{requests}:requests",
        );
 }
 sub print_html()
 {
        print "Content-Type: text/html\n\n";
        print <<HEADER;
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <HTML>
 <HEAD>
 <TITLE>Webserver Statistics for $host</TITLE>
 <META HTTP-EQUIV="Refresh" CONTENT="300">
 <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
 </HEAD>
 <BODY BGCOLOR="#FFFFFF">
 HEADER
        print "<H1>WebServer Statistics for $host</H1>\n";
        for my $n (0..$#graphs) {
                print '<div style="background:#dddddd; width: 632px">';
                print "<H2>$graphs$n{title}</H2>\n";
                print "</div>\n";
                print "<P><IMG BORDER=\"0\" SRC=\"$scriptname.cgi?${n}-t\" ALT=\"$scriptname\">\n";
                print "<P><IMG BORDER=\"0\" SRC=\"$scriptname.cgi?${n}-r\" ALT=\"$scriptname\">\n";
        }
        print "</BODY></HTML>\n";
 }
 sub send_image($)
 {
        my ($file)= @_;
        -r $file or do {
                print "Content-type: text/plain\n\nERROR: can't find $file\n";
                exit 1;
        };
        print "Content-type: image/png\n";
        print "Content-length: ".((stat($file))7)."\n";
        print "\n";
        open(IMG, $file) or die;
        my $data;
        print $data while read(IMG, $data, 16384)>0;
 }
 sub main()
 {
        my $uri = $ENV{REQUEST_URI} || '';
        $uri =~ s/\/^\/+$//;
        $uri =~ s/\//,/g;
        $uri =~ s/(\~|\%7E)/tilde,/g;
        mkdir $tmp_dir, 0777 unless -d $tmp_dir;
        my $img = $ENV{QUERY_STRING};
        if(defined $img and $img =~ /\S/) {
                if($img =~ /^(\d+)-t$/) {
                        my $file = "$tmp_dir/${scriptname}_traffic_$1.png";
                        graph_traffic($graphs$1{seconds}, $file);
                        send_image($file);
                }
                elsif($img =~ /^(\d+)-r$/) {
                        my $file = "$tmp_dir/${scriptname}_requests_$1.png";
                        graph_requests($graphs$1{seconds}, $file);
                        send_image($file);
                }
                else {
                        die "ERROR: invalid argument\n";
                }
        }
        else {
                print_html;
        }
 }
 main;

排程更新流量圖時間,以下為每20分鐘更新一次 (每小時的準點、20分、40分)。
#crontab -e
 0,20,40 * * * * nice -n 10 /etc/lighttpd/rrdtool.sh >& /dev/null

成果連結共六個分析圖檔 (Last 4 Hours、Daily Graphs、Monthly Graphs)。
http://www.weithenn.org/rrdtool/lightygraph.cgi

5、參考


6、Me FAQ

Q1./usr/lib/lighttpd/mod_fastcgi.so: cannot open shared object file: No such file or directory?

Error Message:
修改 lighttpd 設定檔內容支援 PHP (FastCGI) 但啟動 lighttpd 時卻失敗,錯誤訊息如下:
#/etc/rc.d/init.d/lighttpd start
 Starting lighttpd: 2008-01-15 10:41:04: (plugin.c.165) dlopen() failed for: /usr/lib/lighttpd/mod_fastcgi.so
 /usr/lib/lighttpd/mod_fastcgi.so: cannot open shared object file: No such file or directory
 2008-01-15 10:41:04: (server.c.621) loading plugins finally failed                [FAILED]

Ans:
原因是未安裝 lighttpd-fastcgi 套件,所以 /usr/lib/lighttpd 下沒有 mod_fastcgi.so 模組檔案,安裝 lighttpd-fastcgi 套件後就可了。
#yum -y install lighttpd-fastcgi

Q2./usr/lib/lighttpd/mod_fastcgi.so: undefined symbol: ap_user_id?

Error Message:
安裝了RPM Search mod_fastcgi-2.4.0-1.i386.rpm 後啟動 lighttpd 失敗錯誤訊息如下:
#/etc/rc.d/init.d/lighttpd start
 Starting lighttpd: 2008-01-15 10:56:19: (plugin.c.165) dlopen() failed for: /usr/lib/lighttpd/mod_fastcgi.so
 /usr/lib/lighttpd/mod_fastcgi.so: undefined symbol: ap_user_id
 2008-01-15 10:56:19: (server.c.621) loading plugins finally failed                [FAILED]

Ans:
原因為 RPM Search mod_fastcgi-2.4.0-1.i386.rpm 是給 Apache 用的,不是給 LigHttpd 用的所以會有問題。將此 rpm 移除後安裝 lighttpd-fastcgi 套件吧。
#rpm -e mod_fastcgi-2.4.0-1.i386
#yum -y install lighttpd-fastcgi


Q3./var/run/lighttpd/php-fastcgi.socket-0 No such file or directory?

Error Message:
修改 lighttpd 設定檔內容支援 PHP (FastCGI) 但啟動 lighttpd 時卻失敗,錯誤訊息如下:
#/etc/rc.d/init.d/lighttpd start
 Starting lighttpd: 2008-01-15 11:02:36: (mod_fastcgi.c.900) bind failed for:
 unix:/var/run/lighttpd/php-fastcgi.socket-0 No such file or directory
 2008-01-15 11:02:36: (mod_fastcgi.c.1336) ERROR: spawning fcgi failed.
 2008-01-15 11:02:36: (server.c.895) Configuration of plugins failed. Going down.           [OK]  

Ans:
原因在於無法產生 php-fastcgi.socket 檔案,要麻就去 /var/run 下建 lighttpd 資料夾,不然就像我一樣懶人法直接指到 /tmp 下也可以。
#vim /etc/lighttpd/lighttpd.conf
 server.modules = (
                   "mod_fastcgi",   //這行的 mark 要拿掉(支援 PHP-FastCGI)
                  )
#### fastcgi module
## read fastcgi.txt for more info
## for PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini
 fastcgi.server = ( ".php" =>
                   ( "localhost" =>
                    (
                     #"socket" => "/var/run/lighttpd/php-fastcgi.socket", //預設值
                      "socket" => "/tmp/php-fastcgi.socket",              //修改後
                      "bin-path" => "/usr/bin/php-cgi"
                    )
                   )
                  )


Q4.ERROR: creating '/var/lib/lighttpd/lighttpd.rrd': Permission denied?

Error Message:
修改 lighttpd 設定檔內容支援 rrdtool 但啟動 lighttpd 卻沒有產生 rrd-database file(lighttpd.rrd) 查看 lighttpd 錯誤訊息如下:
#tail /var/log/lighttpd/error.log
 2008-04-28 13:55:00: (mod_rrdtool.c.243) rrdtool-response: create /var/lib/lighttpd/lighttpd.rrd --step 60 DS:InOctets:ABSOLUTE:600:U:U
 DS:OutOctets:ABSOLUTE:600:U:U DS:Requests:ABSOLUTE:600:U:U  RRA:AVERAGE:0.5:1:600 RRA:AVERAGE:0.5:6:700 RRA:AVERAGE:0.5:24:775 RRA:AVERAGE:0.5:288:797
 RRA:MAX:0.5:1:600 RRA:MAX:0.5:6:700 RRA:MAX:0.5:24:775 RRA:MAX:0.5:288:797 RRA:MIN:0.5:1:600 RRA:MIN:0.5:6:700 RRA:MIN:0.5:24:775 RRA:MIN:0.5:288:797
 ERROR: creating '/var/lib/lighttpd/lighttpd.rrd': Permission denied
 2008-04-28 13:55:00: (server.c.1193) one of the triggers failed

Ans:
原因為存放 rrd-database 資料夾,lighttpd 無法寫入導致所以更改權限讓 lighttpd 可寫入即可。
#chown lighttpd /var/lib/lighttpd  //否則 lighttpd 無法產生 rrd-database

Q5.裝完 lighttpd 後打 top 發現 prelink 佔用 CPU 97 %?

Error Message:
裝完了 lighttpd 後想說打個 top 看一下記憶體使用情況剛好看到 prelink 佔用了 CPU 97 % 大約五分鐘左右才結束,如下圖

Ans:
什麼是 Prelink?可以從以下這幾篇文章了解,簡單說就是每天 (/etc/cron.daily/prelink) 固定幫你把函式庫連結起來。

Q6.$HTTP"referer" 功能似乎失效,無法禁止整個網站圖檔盜連?

Error Message:
有開啟 mod_rewrite、mod_access 及設定,但功能似乎沒有用還是可以連到相關圖檔,並不會得到 403 - Forbidden 拒絕存取的訊息?
# deny access for all image stealers (anti-hotlinking for images)
 $HTTP"referer" !~ "^($|http://www\.example\.org)" {
  url.access-deny = ( ".jpg", ".jpeg", ".png" )
 }

Ans:
原因就參考這篇吧 #984 (error matching null http referrer) - lighttpd - secure, fast, compliant, and very flexible web-server - Trac 改成如下後就可以整個網站禁止圖檔盜連了。
#vi /usr/local/etc/lighttpd.conf
 server.modules = (
                   "mod_rewrite",   //這行註解拿掉(支援 rewrite Module)
                   "mod_access",    //這行註解拿掉(支援 access Module)
                  )
#### deny access the file-extensions
 $HTTP"referer" !~ "^http://www\.weithenn\.org" {
     url.access-deny = ( ".jpg", ".jpeg", ".png", ".gif" )
 }
文章標籤: