分析背景
最近需要在嵌入式設備路由器上運行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項目是一樣的。