lighty 的生活

lighty 开发者博客

Mod_proxy_core 获得 X-Sendfile 支持

正如承诺的那样,mod_proxy_core 将结合 mod_proxy 和 mod_fastcgi 的功能。mod_proxy 提供了负载均衡器,mod_fastcgi 提供了其故障转移处理,现在还支持 X-Sendfile。该功能的实现方式与 mod_fastcgi 中的有所不同。旧的实现只用静态文件替换内容主体并将其发送出去。新的实现方式略有不同,并获得了一系列好处。当检测到 X-Sendfile 头部(并且在配置中允许)时,内容主体将被忽略并执行内部重定向。mod_proxy_core 会退出循环,mod_staticfile 接管请求。mod_staticfile 可以完成所有神奇的操作:* 设置 Last-Modified 和 ETag * 处理 '304 Not Modified' * 处理范围请求 * 压缩

设置

设置与之前相同
$HTTP["url"] =~ "^/bugme(/|$)" {
    proxy-core.balancer = "round-robin"
    proxy-core.protocol = "http"
    proxy-core.backends = ( "127.0.0.1:2000" )
    proxy-core.allow-x-sendfile = "enable"
}
在端口 2000 上,我运行了一个小型 $ nc -l 2000 来模拟一个超复杂、高安全的应用。$ wget --header='Accept-Encoding: gzip' http://127.0.0.1:1025/bugme/upload.html 是我的浏览器替代品
GET /bugme/upload.html HTTP/1.0
X-Forwarded-For: 127.0.0.1
X-Host: 127.0.0.1:1025
X-Forwarded-Proto: http
User-Agent: Wget/1.10.2 (Red Hat modified)
Accept: */*
Host: 127.0.0.1:1025
Accept-Encoding: gzip
FOO: foo

HTTP/1.0 200 OK
X-Sendfile: /path/to/upload.html
... 于是我们就有了压缩后的 upload.html
$ ls -l upload.html
-rw-rw-r--  1 jan jan 661 Sep 26  2005 upload.html
$ ls -l /path/to/upload.html
-rw-rw-r--  1 jan jan 1193 Sep 26  2005 /path/to/upload.html
您在应用程序中需要做的就是设置 X-Sendfile 头部

或在 Rails 中
response.headers["X-Sendfile"] = "/path/to/upload.html"