关于lighttpd的资料
某位童鞋这样写redirect无效:
有童鞋建议这样:
这个比较奇怪,mark
原文 http://forum.lighttpd.net/topic/1622
url.redirect = (
"^/foo" => "http://www.somesite.com"
)
url.rewrite-once = (
"^/(.*)/?$" => "/action.php?id=$1",
)
"^/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",
)
"^/foo" => "http://www.somesite.com"
)
url.rewrite-once = (
"^/foo" => "$0",
"^/(.*)/?$" => "/action.php?id=$1",
)
这个比较奇怪,mark
原文 http://forum.lighttpd.net/topic/1622
今天某个服务器根分区已经满了,导致很多服务出错。
究其原因,是 /var/tmp 目录写满了文件:
容易从文件名称看出来跟lighttpd有关
检查lighttpd的配置得知,默认的上传路径是 /var/tmp
那相应的解决办法就是自己指定一个空间足够的目录了,比如:
注意是数组的形式,那估计可以设定多个目录
究其原因,是 /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-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 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")
注意是数组的形式,那估计可以设定多个目录
我个人喜欢用lighttpd作为php的web服务器,其中最欣赏的是信息统计。在这点上,apache和nginx还真的比不上,作为后端服务器,我比较推荐你使用,配置也简单。
安装和配置就不多说,网上另外可以找到。
我们看看lighttpd里面的一些监测设置:
第一个(status.status-url)是当前服务器的状态,一般情况下,你可以很清楚的知道现在在处理的是什么地址,也明白什么请求一直在处理并且处理了多少时间。很多时候你可以容易发现一些不容易看到的问题,毕竟处理时间久的请求肯定因为出问题了。
第二个(status.config-url)是服务器的配置,比如:
你可以知道现在加载的有什么模块,可以在配置里增添。
第三个(status.statistics-url)是今天要介绍的,它可以很清楚的知道php的压力分布,在mod_cache版本还可以知道缓存的命中率以及缓存的个数。
你可以从上述信息了解到,当前php处理过1145个请求,压力很小,没有正在处理的php请求。
配置文件里,你可以自定义fastcgi服务器的名称来区分不同的请求,比如:
你可以看到如下的统计信息:
说明什么问题呢?
1 压力主要来自www,dl的站点php的处理压力很小
2 www的并发处理有3个,也许这个数字比较高时,你可以看看status.status-url里到底有哪些地址正在处理
3 都还没有发生php请求死掉(died)的情况,还是良好的
有了这些统计信息,有助于你避免一些问题的发生,总比蒙着眼睛用nginx和apache好。
安装和配置就不多说,网上另外可以找到。
我们看看lighttpd里面的一些监测设置:
status.status-url = "/aslibra-status"
status.config-url = "/aslibra-config"
status.statistics-url = "/aslibra-counters"
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
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
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.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
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好。
lighttpd可以rewrite地址到一个php文件处理所有相关的请求,比如:
这个/是从网站根目录开始算的,所以不能指定其它目录的文件
需要制定其它目录的文件,那可以先alias处理,比如
先定义一个本地文件为文件系统的另外一个文件
然后rewrite到此文件即可!
url.rewrite-once = (
"^/c/" => "/page_c.php"
)
"^/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"
)
}
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到此文件即可!
今日发现lighttpd的日志有大量的错误是同样的错误提示:
因为存在11433/1 的下级目录,而lighttpd根据地址认为 11433 是一个文件,删除的时候出错了,代码位置是:
unlink只能删除文件,不能删除文件夹,所以删除失败。
在linux下同一个目录下不会有同名的文件和文件夹
也就是说,如果 /a/1 的地址先访问,/a/1 的文件就先创建了
如果 /a/1/index.htm 先访问,/a/1 的文件夹先创建,老外一种形式就无法再缓存,这个就给后端带来了压力。
这个可以用redirect或者rewrite修正,参考做法:
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));
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
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")
))
}
#指定规则补全地址
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")
))
}