HTTP Addition模块(HTTP Addition)


·摘要

这个模块可以在当前的location之前或者之后增加别的location。
它作为一个输出过滤器执行,包含到其他location中的主请求和子请求不会被完全缓冲,并且仍然以流的形式传递到客户端,因为最终应答体的长度在传递HTTP头的时候是未知的,HTTP的chunked编码总是在这里使用。

安装

默认情况下这个模块是没有编译的,如果要使用则需要在编译时指定下列参数:
./configure --with-http_addition_module
示例配置:
location / {
  add_before_body   /before_action;
  add_after_body    /after_action;

一些限制

在0.8.17版本中如果当前的location请求一个请求自身的子请求,包含的location不会被添加。如以下配置:
location /foo {
  add_before_body /bar;
}
 
location /bar {
  add_before_body  /baz;
}
连接到/foo的请求并不会将/baz对应的location添加到字段中。
同样注意,在定义需要包含的location时只能使用字符串,而不能使用变量,所以以下配置:
location / {
  set $before_action /before_action;
  add_before_body $before_action;
}
并不能正常工作(虽然在测试配置文件正确性的时候可以通过)

·指令

add_before_body

语法:add_before_body uri
默认值:no
使用字段:http, server, location
在应答体的前面增加URI,为一个处理结果发出子请求。

add_after_body

语法:add_after_body uri
默认值:no
使用字段:http, server, location
在应答体的后面增加URI,为一个处理结果发出子请求。

addition_types

语法:addition_types mime-type [mime-type ...]
默认值:text/html
使用字段:http, server, location
指令(0.7.9)允许增加让该location处理的其他MIME类型(默认为"text/html")。(0.8.17之前这个指令在源代码中被拼写成"addtion_types",不过在0.8.17版本后修复了。)

·参考文档

Original Documentation
Nginx Http Addition Module

前进->嵌入式Perl模块(Embedded Perl)