Nginx http_addition_filter_module 响应内容中追加内容
原创
©著作权归作者所有:来自51CTO博客作者wx5bcd2f496a1cf的原创作品,请联系作者获取转载授权,否则将追究法律责任
addition_filter_module
The ngx_http_addition_module
module is a filter that adds text before and after a response. This module is not built by default, it should be enabled with the --with-http_addition_module
configuration parameter.
Example Configuration
./configure --prefix=/usr/local/nginx --with-http_addition_module
location / {
add_before_body /before_action;
add_after_body /after_action;
}
ngx_http_addition_filter_module 在响应之前或者之后追加文本内容,比如想在站点底部追加一个 js 或者 css,可以使用这个模块来实现,这个模块和淘宝开发的 nginx footer 模块有点类似,但是还是有不同. 这个模块需要依赖子请求, nginx footer 依赖 nginx 写死的配置.
这个模块可以在我们原始返回给用户的响应中,响应之前和之后添加一些不同的内容。添加的方式是在响应的之前或者响应之后添加内容,而不是修改响应的本身。添加内容的方式是通过添加子请求,根据这个子请求返回的响应再添加到原始响应的前和后
ngx_http_addition_filter_module默认是未编译进Nginx的,需要通过with指令将其启用。
addition模块的指令
语法: add_before_body uri;
默认值: —
配置段: http, server, location
发起一个子请求,请求给定的 uri,并且将内容追加到主题响应的内容之前。
语法: add_after_body uri;
默认值: —
配置段: http, server, location
发起一个子请求,请求给定的 uri,并且将内容追加到主题响应的内容之后。
语法: addition_types mime-type …;
默认值: addition_types text/html;
配置段: http, server, location
这个指令在 0.7.9 开始支持,指定需要被追加内容的 MIME 类型,默认为“ text/html”,如果制定为*,那么所有的
举例说明
第一个例子:
[root@www nginx-1.16.1]# cat objs/ngx_modules.c | grep http_addition_filter_module
extern ngx_module_t ngx_http_addition_filter_module;
&ngx_http_addition_filter_module,
"ngx_http_addition_filter_module",
[root@www ]# mkdir -p /data/www/test
[root@www ]# echo "body" >> /data/www/test/a.txt
server {
listen 80;
server_name www.test.com;
charset utf-8;
root /data/www/test;
location /{
# add_before_body /before_action; #先注释掉来看看
# add_after_body /after_action;
# addition_types *;
}
location /before_action{
return 200 'new content before\n';
}
location /after_action{
return 200 'new content after\n';
}
}
[root@www ]# curl www.test.com/a.txt --这是不使用add指令返回结果
body
-----------------------------------------------------------------------------------------
location /{
add_before_body /before_action;
add_after_body /after_action;
addition_types *;
}
location /before_action{ #这个url可以使用反向代理去访问第三方服务,这里为了简单使用简单的return指令返回
return 200 'new content before\n';
}
location /after_action{
return 200 'new content after\n';
}
[root@www nginx-1.16.1]# curl www.test.com/a.txt --可以看到在内容前后添加了相应的内容
new content before
body
new content after
第二个例子:来源于网络
配置nginx.conf:
server {
listen 80;
server_name www.ttlsa.com;
root /data/site/www.ttlsa.com;
location / {
add_before_body /2013/10/header.html;
add_after_body /2013/10/footer.html;
}
}
测试:
以下三个文件,对应请求的主体文件和 add_before_body、 add_after_body 对应的内容
cat /data/site/test.ttlsa.com/2013/10/20131001_add.html
<html>
<head>
<title>I am title</title>
</head>
<body>
ngx_http_addition_module
</body>
</html>
cat /data/site/test.ttlsa.com/2013/10/header.html
I am header!
cat /data/site/test.ttlsa.com/2013/10/footer.html
footer – ttlsa
访问结果如下,可以看到 20131001_add.html 的顶部和底部分别嵌入了子请求 header.html 和 footer 的内容。
curl test.ttlsa.com/2013/10/20131001_add.html
I am header!
<html>
<head>
<title>I am title</title>
</head>
<body>
ngx_http_addition_module
</body>
</html>
footer - ttlsa
addition 模块与nginx sub 替换响应内容模块应用场景有点相同,具体怎么使用,大家结合实际情况来使用。