Nginx如何配置正则仅匹配文件名过滤长度超255字节的请求
Nginx 过滤超长文件名配置修正方案
原有规则失效原因
你之前写的规则存在核心问题:正则中使用.匹配任意字符,包含路径分隔符/,会把前面的目录层级字符全部计入长度统计。你担心的查询字符串计入长度的问题其实不存在,Nginx的location匹配默认仅作用于$uri变量,该变量已经自动剔除了?之后的所有查询参数,不会被统计到长度中。
修正后配置
直接修改location正则即可满足需求:
location ~* /[^/]{256,}$ { deny all; }
正则逻辑说明
/匹配路径的最后一个分隔符[^/]{256,}匹配256个及以上的非/字符,也就是路径的最后一段(实际文件名部分)$匹配路径结尾,确保只匹配最后一段的文件名,不会统计前面的目录层级
该规则只会拦截文件名长度超过255字节的请求,不会误拦目录名较长、或者查询字符串较长的正常请求,完全匹配你的业务需求。
内容的提问来源于stack exchange,提问作者Railsana
相关产品推荐
相关产品推荐

