Nginx 根据响应状态码应用 sub_filter 指令

Nginx apply sub_filter directive based on response status code

我有一个 Nginx 服务器,我在其中使用 sub_filter 指令通过替换 </head> 结束标记在 HTML 响应中注入脚本:

sub_filter '</head>' '<script src="some-custom-script.js"></script> </head>';

问题是我想有条件地应用 sub_filter 指令:我希望它仅在响应状态代码为 2xx(例如成功)时激活,而不是在错误状态代码(例如 404)时激活。原因是我不想将脚本注入错误页面 HTMLs.

有什么方法可以在 Nginx 配置中实现这个“if else”分支吗?

第一个想法是使用 if 语句和 $status 变量,但 sub_filter 不能用于 if only in http、server、location。可以使用 body_filter_by_lua

实现相同的功能
body_filter_by_lua '
    if ngx.status == ngx.HTTP_OK then
         ngx.arg[1] = ngx.re.sub(ngx.arg[1], "</head>", "<script src=\"some-custom-script.js\"></script> </head>")
    end
';