Nginx 向响应内容中添加额外信息

2017-07-09 3847点热度 1人点赞

平时如果我们添加一些信息,比如 title,只需要编辑站点文件即可。但是有时候这个站点要是动态的,我们就无能为力。就此 Nginx 提供了一个模块,向响应内容中添加额外的信息,以达到所需的效果


如果以前看过本站文章的人,一定知道本站曾经搭建过一个下载站点,这个下载站点使用了 Nginx 的 autoindex 插件,可以显示整个文件夹,并且可以直观的看到文件列表。

nginx 的配置文件如下

location / {
    # 开启索引
    autoindex       on;
    # 列表显示格式
    autoindex_format html;
    # 关闭文件详细大小
    autoindex_exact_size    off;
    # 列表显示本地时间
    autoindex_localtime     on;
}

但是作为一个站点,我们应该添加个标题和 logo 对吧?然而实际信息却没有编辑的地方。当时只能放弃。

近期查阅 nginx 配置文档,发现有两条配置命令可以实现这个效果

location / {
    # 添加头部脚部信息
    add_before_body /.site/header.html;
    add_after_body /.site/footer.html;
    addition_types mime-type text/html;
}

这两条配置命令所属的模块是 ngx_http_addition_module,意义是用 nginx 向响应内容中添加额外信息,如果自行编译默认该模块不安装。

add_before_body 是在网站内容最前添加的信息,add_after_body 是在网站内容最后添加的信息,addition_types 是指定添加信息的 MIME 类型,默认是 text/html(两种写法,不带"mime-type"字段为老版本兼容命令)

追加的信息是纯文本,也可以追加图片等其他类型。在此我就直接追加以前打算添加的纯文本。(具体实际情况可以访问 StarryVoid - Downloads 查看)


实际上,这个模块属于 subrequest 这种设计模式,通过子请求得到数据,多余信息可以查看

https://www.nginx.com/resources/wiki/extending/api/http/?highlight=addition#ngx-http-subrequest

StarryVoid

Have a good time