Apache 2.4中请求成功却因Require expr触发‘client denied by server configuration’错误日志的问题咨询
Apache 2.4中请求成功却因Require expr触发‘client denied by server configuration’错误日志的问题咨询
各位Apache大佬,我碰到了一个有点费解的问题,想请大家帮忙分析下:
我们的Apache错误日志里一直在生成client denied by server configuration的报错信息,但实际上对应的.htaccess配置功能是完全正常的——当用符合要求的User Agent访问时,服务器返回200响应且内容正常;用其他UA访问则会返回403 Forbidden,完全符合我们的预期。但每一次成功的请求都会触发这条错误日志,这让日志变得非常杂乱,很影响排查其他问题。
下面是我们.htaccess里的相关配置片段:
SetEnvIfExpr "req_novary('User-Agent') =~ /.*WHATEVER.*/" WHATEVER=1 <RequireAll> # Only allow access for these hosts Require expr "%{HTTP_HOST} =~ /((host1|host2|host3)\.com)/" # Deny access if any of the rules in the RequireNone succeed! <RequireNone> # IIRC putting the two requires here is fine, it's an implicit OR. Require expr "%{REQUEST_URI} =~ m#.*RELEASE_NOTES\.txt#i" <RequireAll> # Block path unless it's one of the User Agents we want to allow Require expr "%{REQUEST_URI} =~ m#pathy/path#i" # This expr is what seems to trigger the error, even though the User Agent # matches and the server responds with a HTTP 200 code (and the request is successful). Require expr "!(reqenv('WHATEVER') == 1)" </RequireAll> </RequireNone> </RequireAll>
我排查后发现,问题好像出在最后那条Require expr "!(reqenv('WHATEVER') == 1)"规则上——哪怕User Agent匹配成功、请求最终被允许,这条规则还是会触发错误日志。
之前我们也遇到过类似的Require expr导致日志报错的问题,当时是改成RewriteRule解决的(那次问题几乎每个资源访问都会生成错误日志)。这次我们也可以用同样的方法绕开,但我真的很好奇:为什么明明请求最终成功了,这条Require expr还是会触发错误日志呢?有没有办法在不切换到RewriteRule的前提下解决这个日志问题?
备注:内容来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

