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
';
我有一个 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
';