Rails应用栈中应在哪个位置插入中间件可提前对无效请求返回ok响应
问题描述
【澄清说明】本问题不涉及黑客防御、入侵防护类安全相关内容,仅用于处理已知无意义请求,避免产生冗余日志和误触发告警。我清楚请求拦截、重定向操作更适合通过Apache等反向代理服务实现,我的场景如下:我拥有一台仅供私人使用的小型服务器,已配置异常事件告警规则,目前已开发完成自定义中间件Friendly::SayYesOK,想要对请求路径包含php、joomla、Wordpress等特征的无意义扫描请求尽早返回“ok”响应,不将这类请求写入日志,也不纳入404错误分析逻辑。我要求该中间件的执行时机为请求头解析完成之后、routes.rb路由匹配逻辑执行之前,请问我在如下配置代码中,问号位置应该填写哪个中间件名称?
config.middleware.insert_before ?????, Friendly::SayYesOK
解答
你需要填写的中间件名称为 ActionDispatch::Routing::RouteSet,最终配置代码如下:
config.middleware.insert_before ActionDispatch::Routing::RouteSet, Friendly::SayYesOK
配置逻辑说明
ActionDispatch::Routing::RouteSet是Rails框架内置的、负责执行routes.rb路由匹配逻辑的核心中间件,将自定义中间件插入到它之前,刚好满足「请求头解析完成后、路由匹配逻辑执行前」的执行时机要求- 该顺序下,自定义中间件会优先处理所有请求,匹配到扫描类特征后直接返回ok响应并终止后续请求流程,不会进入路由匹配环节,自然不会触发404错误统计、不会生成冗余日志,也不会误触发异常告警规则
内容的提问来源于stack exchange,提问作者halfbit
相关产品推荐
相关产品推荐

