关于lighttpd的资料
某位童鞋这样写redirect无效:

url.redirect = (
                 "^/foo" => "http://www.somesite.com"
                )

url.rewrite-once = (
                    "^/(.*)/?$" => "/action.php?id=$1",
                   )


有童鞋建议这样:
url.redirect = (
                 "^/foo" => "http://www.somesite.com"
               )

url.rewrite-once = (
                    "^/foo"     => "$0",
                    "^/(.*)/?$" => "/action.php?id=$1",
                   )


这个比较奇怪,mark
原文 http://forum.lighttpd.net/topic/1622
今天某个服务器根分区已经满了,导致很多服务出错。

究其原因,是 /var/tmp 目录写满了文件:

引用
lighttpd-upload-eIZa83  lighttpd-upload-JwV3xq  lighttpd-upload-P44hE4  lighttpd-upload-Uinkoj  lighttpd-upload-Zs2kwX
lighttpd-upload-eJ03lT  lighttpd-upload-JWvG2m  lighttpd-upload-p4dNCH  lighttpd-upload-uIpAlx  lighttpd-upload-Zs3OTO
lighttpd-upload-eJ0Soy  lighttpd-upload-JwxFM6  lighttpd-upload-p4Fpth  lighttpd-upload-uiq7qV  lighttpd-upload-ZS9G7z
lighttpd-upload-Ej1kY9  lighttpd-upload-Jx3QIZ  lighttpd-upload-P4ghIw  lighttpd-upload-uiQ8r6  lighttpd-upload-ZSa7yh

容易从文件名称看出来跟lighttpd有关
检查lighttpd的配置得知,默认的上传路径是 /var/tmp

引用
Description
server.upload-dirs option
defaults to /var/tmp as we assume it is a local harddisk

server.upload-dirs = ( "/var/tmp" )

那相应的解决办法就是自己指定一个空间足够的目录了,比如:

server.upload-dirs = ("/Cache/aslibra.com/lighttpd-upload")

注意是数组的形式,那估计可以设定多个目录
Tags:
我个人喜欢用lighttpd作为php的web服务器,其中最欣赏的是信息统计。在这点上,apache和nginx还真的比不上,作为后端服务器,我比较推荐你使用,配置也简单。

安装和配置就不多说,网上另外可以找到。
我们看看lighttpd里面的一些监测设置:

status.status-url          = "/aslibra-status"
status.config-url          = "/aslibra-config"
status.statistics-url  = "/aslibra-counters"

第一个(status.status-url)是当前服务器的状态,一般情况下,你可以很清楚的知道现在在处理的是什么地址,也明白什么请求一直在处理并且处理了多少时间。很多时候你可以容易发现一些不容易看到的问题,毕竟处理时间久的请求肯定因为出问题了。
第二个(status.config-url)是服务器的配置,比如:
引用
lighttpd 1.4.20
Server-Features
RegEx Conditionals enabled
Network Engine
fd-Event-Handler linux-sysepoll
Config-File-Settings
Loaded Modules indexfile
rewrite
redirect
alias
access
status
fastcgi
proxy
expire
accesslog
dirlisting
staticfile

你可以知道现在加载的有什么模块,可以在配置里增添。
第三个(status.statistics-url)是今天要介绍的,它可以很清楚的知道php的压力分布,在mod_cache版本还可以知道缓存的命中率以及缓存的个数。

引用
fastcgi.active-requests: 0
fastcgi.backend.0.0.connected: 1145
fastcgi.backend.0.0.died: 0
fastcgi.backend.0.0.disabled: 0
fastcgi.backend.0.0.load: 0
fastcgi.backend.0.0.overloaded: 0
fastcgi.backend.0.load: 1
fastcgi.requests: 1145

你可以从上述信息了解到,当前php处理过1145个请求,压力很小,没有正在处理的php请求。

配置文件里,你可以自定义fastcgi服务器的名称来区分不同的请求,比如:

#默认的
fastcgi.server = ( ".php" =>(
    ( "host" => "127.0.0.1","port" => 9000,)
  )
)

$HTTP["host"] == "www.aslibra.com" {
  server.document-root = "/Data/webapps/www.aslibra.com"
  fastcgi.server = ( ".php" =>(
      "www"=>( "host" => "127.0.0.1","port" => 9000,)
    )
  )
}

$HTTP["host"] == "dl.aslibra.com" {
  server.document-root = "/Data/webapps/dl.aslibra.com"
  fastcgi.server = ( ".php" =>(
      "dl"=>( "host" => "127.0.0.1","port" => 9000,)
    )
  )
}

你可以看到如下的统计信息:
引用
fastcgi.active-requests: 3
fastcgi.backend.0.0.connected: 4775
fastcgi.backend.0.0.died: 0
fastcgi.backend.0.0.disabled: 0
fastcgi.backend.0.0.load: 0
fastcgi.backend.0.0.overloaded: 0
fastcgi.backend.0.load: 0
fastcgi.backend.dl.0.connected: 863
fastcgi.backend.dl.0.died: 0
fastcgi.backend.dl.0.disabled: 0
fastcgi.backend.dl.0.load: 0
fastcgi.backend.dl.0.overloaded: 0
fastcgi.backend.dl.load: 0
fastcgi.backend.www.0.connected: 696191
fastcgi.backend.www.0.died: 0
fastcgi.backend.www.0.disabled: 0
fastcgi.backend.www.0.load: 3
fastcgi.backend.www.0.overloaded: 0
fastcgi.backend.www.load: 3
fastcgi.requests: 701829

说明什么问题呢?

1 压力主要来自www,dl的站点php的处理压力很小
2 www的并发处理有3个,也许这个数字比较高时,你可以看看status.status-url里到底有哪些地址正在处理
3 都还没有发生php请求死掉(died)的情况,还是良好的

有了这些统计信息,有助于你避免一些问题的发生,总比蒙着眼睛用nginx和apache好。
Tags: , ,
lighttpd可以rewrite地址到一个php文件处理所有相关的请求,比如:
url.rewrite-once = (
        "^/c/" => "/page_c.php"
)

这个/是从网站根目录开始算的,所以不能指定其它目录的文件
需要制定其它目录的文件,那可以先alias处理,比如

$HTTP["host"] == "www.aslibra.com" {
        server.document-root = "/Data/webapps/www.aslibra.com"
        alias.url = (
                "/page_c.php" => "/Data/webapps/test.aslibra.com/page_c.php"
        )
        url.rewrite-once = (
                "^/c/" => "/page_c.php"
        )
}


先定义一个本地文件为文件系统的另外一个文件
然后rewrite到此文件即可!
Tags: ,
今日发现lighttpd的日志有大量的错误是同样的错误提示:

2009-05-21 18:39:06: (mod_cache.c.2080) failed to delete old cache file /cache/web/www.aslibra.com/search/article/11433 before update Is a directory


因为存在11433/1 的下级目录,而lighttpd根据地址认为 11433 是一个文件,删除的时候出错了,代码位置是:

   if (unlink(file->ptr) && errno != ENOENT) {
    log_error_write(srv, __FILE__, __LINE__, "sbss", "failed to delete old cache file",
      hctx->file, "before update", strerror(errno));


unlink只能删除文件,不能删除文件夹,所以删除失败。
在linux下同一个目录下不会有同名的文件和文件夹

[root@localhost test]# ll
total 8
-rw-r--r--  1 root root 1 May 24 02:08 a
[root@localhost test]# mkdir a
mkdir: `a' exists but is not a directory
[root@localhost test]# mkdir b
[root@localhost test]# ll
total 16
-rw-r--r--  1 root root    1 May 24 02:08 a
drwxr-xr-x  2 root root 4096 May 24 02:16 b
[root@localhost test]# echo>b
-bash: b: Is a directory


也就是说,如果 /a/1 的地址先访问,/a/1 的文件就先创建了
如果 /a/1/index.htm 先访问,/a/1 的文件夹先创建,老外一种形式就无法再缓存,这个就给后端带来了压力。

这个可以用redirect或者rewrite修正,参考做法:

$HTTP["host"] == "www.aslibra.com" {
  #指定规则补全地址
        url.redirect = (
                "^/search/(article|pic)/([^/]+)$" => "/search/$1/$2/",
        )
        $HTTP["url"] =~ "^/search/" {
    #可以重新制定目录缓存文件,避免原先的文件冲突
    cache.bases = ("/cache/web/search/")
                cache.support-queries = "disable"
        }
        proxy.server  = ( "" =>(
                ( "host" => "192.168.1.2")
        ))
}
Tags: , ,
分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐