以下 几种可行方案 实现类似效果,取决于你的控制权限和架构:
方案一:在 Nginx 内部 实现关键词过滤(推荐)
虽然你说“Nginx 外”,但最合理的方式其实是 在 Nginx 层拦截响应内容(使用 ngx_http_sub_module 或第三方模块如 nginx-lua)。
示例:用 OpenResty(Nginx + Lua)拦截含敏感词的页面
# 安装 OpenResty 后,在 location 中添加:
location / {
proxy_pass http://backend;
body_filter_by_lua_block {
local body = ngx.arg[1]
if body and (string.find(body, "赌博") or string.find(body, "色情")) then
ngx.log(ngx.WARN, "Blocked page containing sensitive keyword")
ngx.arg[1] = "<h1>内容违规,已被屏蔽</h1>"
ngx.arg[2] = true -- 结束输出
ngx.status = 403
end
}
} 缺点:需启用 body_filter,对性能有影响;仅适用于 HTML 文本内容。
方案二:在 应用层 过滤(如 PHP/Node.js/Java)
在你的后端代码中,渲染 HTML 前检查内容是否含敏感词:
// PHP 示例
$output = renderPage(); // 生成 HTML
if (preg_match('/赌博|色情|诈骗/i', $output)) {
http_response_code(403);
exit('内容包含违规信息');
}
echo $output; 优点:精准、可控、性能好 适用:你有后端代码控制权
方案三:用 WAF(Web 应用防火墙)
部署如 ModSecurity + Nginx,通过规则拦截含关键词的响应:
# ModSecurity 规则示例(拦截响应体)
SecRule RESPONSE_BODY "赌博|色情" \
"id:1001,phase:4,deny,status:403,msg:'Blocked sensitive content'" 适合企业级防护 无需改业务代码
替代思路:阻止访问特定 URL 或参数(而非内容)
如果你能预判哪些页面会包含关键词(如 /article?id=123),可在 Nginx 直接拦截:
# 拦截含敏感参数的请求
if ($args ~* "keyword=赌博") {
return 403;
}
# 拦截特定路径
location ~* ^/sensitive/ {
return 403;
} 网友回复
如何用html写出网页滚动视频播放卡片视觉差异效果的代码?
程序员如何低成本搭建代理进行科学上网学习技术?
threejs如何做个三维搭积木的游戏?
three如何实现标记多个起始路过地点位置后选择旅行工具(飞机汽车高铁等),最后三维模拟行驶动画导出mp4?
ai实时驱动的3d数字人可视频聊天的开源技术有吗
swoole+phpfpm如何实现不同域名指向不同目录的多租户模式?
如何用go替换nginx实现请求phpfpm解析运行php脚本?
有没有浏览器离线运行进行各种文档、图片、视频格式转换的开源工具?
如何使用go语言搭建一个web防火墙?
linux如何检测特定网络协议比如http协议中报文是否包含特点关键词并阻止返回给客户?


