分析背景
最近需要在嵌入式设备路由器上运行lighttpd,主要需要使用它的proxy代理功能,实现http流量代理到自己服务器上。
并且由于配置一个域名的代理配置文件如下:
$HTTP["host"] == "www.baidu.com" {
proxy.forwarded = (
"for" => 0
),
proxy.header = (
"map-host-request" => (
"www.baidu.com" => "www.test.com"
),
"map-urlpath" => (
"/" => "/www.baidu.com/"
)
),
proxy.server = (
"" => (
(
"host" => "www.test.com",
"port" => 80
)
)
)
}
在实际业务场景中,我们需要代理的需要肯定是会需要成百上千个,这在有限资源的路由器上是不友好的。因此,我觉得有必要进行配置的改造,避免重复不需要的字符而占用系统内存。目标配置格式如下:
server=www.test.com:80
host=www.baidu.com
host=www.qq.com
当然要进去上述改造,我们需要对lighttpd的源码有一定的整体了解,因此,有了此次分析。
lighttpd 源码模型
lighttpd 采用 watcher and worker的运行模式。由一个watcher产生并监控 多个worker运行的方式,这一点跟nginx项目是一样的。