&引用;未找到:/406.shtml";来自django

&引用;未找到:/406.shtml";来自django,django,apache,.htaccess,http-status-code-406,Django,Apache,.htaccess,Http Status Code 406,我正在共享主机上使用ApacheFCGi运行django。我已经将其设置为并通过电子邮件不断查看未找到:/406.shtml(我猜s是因为它仅为https)。但是,我已经在中设置了错误文档。htaccess: ErrorDocument 406 /error/406.html 在为每一个错误设置ErrorDocument之前,我从django那里得到了一堆类似的404错误,但406仍然在发生。从grep406到apache错误日志,我看到406.shtml偶尔出现406(而不是404)错误,如

我正在共享主机上使用ApacheFCGi运行django。我已经将其设置为并通过电子邮件不断查看
未找到:/406.shtml
(我猜
s
是因为它仅为https)。但是,我已经在
中设置了错误文档。htaccess

ErrorDocument 406 /error/406.html
在为每一个错误设置
ErrorDocument
之前,我从django那里得到了一堆类似的404错误,但406仍然在发生。从
grep406
到apache错误日志,我看到
406.shtml
偶尔出现406(而不是404)错误,如下所示,但不像django给我发电子邮件那样频繁:

[Fri ...] [error] [client ...]
    ModSecurity: Access denied with code 406 (phase 1).
    Pattern match "Mozilla ... AhrefsBot ...)" at REQUEST_HEADERS:User-Agent.
    [file "/usr/local/apache/conf/mod_sec/mod_sec.hg.conf"] [line "126"]
    [id "900165"] 
    [msg "AhrefsBot BOT Request"]
    [hostname "www.myhostname.com"]
    [uri "/406.shtml"]
    [unique_id "..."]
我甚至不确定这是否是apache内部重定向到
406.shtml
并将其转发到django,或者是否有某个bot试图直接查找
406.shtml
。前者似乎表明
ErrorDocument
有问题。后者不是我真正的问题,但是我应该在apache日志中看到404 for
406.shtml
,或者什么都没有,因为django将处理404?我怎样才能进一步找到它


我无法通过访问我的网站重现这个问题,但我想知道发生了什么。

您的Apache中安装了ModSecurity,这是一个WAF,它试图保护您的网站免受攻击、机器人等攻击。不幸的是,像垃圾邮件一样,这些都是现在网站运行的重要组成部分

ModSecurity是Apache的一个附加模块,它允许您定义规则,然后根据这些规则运行每个请求,并决定是否阻止请求

在这种情况下,规则(900165,在文件“/usr/local/apache/conf/mod_sec/mod_sec.hg.con”中定义)已决定根据用户代理(AhrefsBot)以406状态阻止此请求

Ahref是一个网站,它在网络上爬行,试图建立一个链接数据库。搜索引擎优化人员使用它来查看谁链接到你的网站(反向链接对搜索引擎优化非常重要),因为谷歌(你认为谁是这类信息的更好提供者)只提供链接样本,而不是完整列表

AhrefBot是否存在危险,是否应该阻止它?这是一个意见问题。假设它真的是AhrefBot(一些邪恶的机器人可能会假装是它,以便看起来合法,所以请检查IP地址以查看它来自的主机名)另一方面,这是一个开放网站的价格。你的网站对公众开放,也对那些编写机器人和工具的人开放(好或坏)

为什么会返回406?这就是ModSecurity和/或规则的定义方式。请检查Apache配置。406有点不寻常,通常会出现403(拒绝访问)或500(内部服务器错误)

什么是406.shtml文件?我不知道。A.shtml是一个HTML文件,它还允许服务器端包含将其他文件和代码嵌入到HTML文件中。老实说,它们不再被广泛使用,因为PHP和/或其他语言更为常见。这可能是一种攻击:即,有人试图上传406.shtml文件,然后en导致调用它,使其“执行”并包含文件的内容,从而有可能访问Apache可以看到的Web服务器上不可用的文件,或者用户请求(出于某种原因),或者Apache配置为显示406错误或ModSecurity规则正在重定向到该文件

希望这能提供一个好的背景,我能建议的最好的事情是浏览您的Apache配置文件,以及它加载的任何其他配置文件(包括它必须加载的mod_sec.hg.con文件),以完全了解您的设置和。决定您是否需要在此处执行任何操作

您可以做以下几件事之一:

  • 按原样离开。ModSecurity正在做它被告知要做的事情,并用406阻止它
  • 关闭此规则并允许AhrefRef通过,这样您就不会收到此警报
  • 更改ModSecurity配置/规则以返回除406以外的错误,以便可以忽略它
  • 完全关闭ModSecurity。我认为这是一个很好的工具,值得一试,但要想从中获得最大的收益确实需要一些时间和精力
  • 正确设置406错误页面。要做到这一点,您需要了解它目前试图返回406.shtml的原因

  • 另外,由于您在共享主机上并且可能没有完全访问权限,因此也不确定您可以使用这些选项中的哪些。如果可以,请与您的主机提供商联系以获取建议。

    您的Apache中安装了ModSecurity,它是一种WAF,用于保护您的网站免受攻击、机器人程序等。这些,如电子邮件垃圾邮件,都是部分和parc不幸的是,el现在经营一个网站已经有好几天了

    ModSecurity是Apache的一个附加模块,它允许您定义规则,然后根据这些规则运行每个请求,并决定是否阻止请求

    在这种情况下,规则(900165,在文件“/usr/local/apache/conf/mod_sec/mod_sec.hg.con”中定义)已决定根据用户代理(AhrefsBot)以406状态阻止此请求

    Ahref是一个试图建立链接数据库的网站。搜索引擎优化人员使用它来查看谁链接到你的网站(反向链接对搜索引擎优化非常重要),因为谷歌(你认为谁是这类信息的更好提供者)只提供链接样本,而不是完整列表

    AhrefBot是否存在危险,是否应将其阻止?嗯,这是一个意见问题。假设它真的是AhrefBot(一些邪恶的机器人可能会假装是它,以便看起来合法,所以检查IP地址以查看它来自的主机名),那么它可能是在浪费您的资源,而对您没有多大好处。另一方面,这是一个开放网络的代价。您的网站可供公众使用,也可供写博文的人使用