使用apache+php-fpm时出现随机的403错误

24

我的一台服务器上安装了Ubuntu 14.04.5、Apache 2.4.23和php-fpm 7.0.11。我遇到了随机的403错误。

我之所以说“随机”,是因为在我尝试访问这些页面时,日志中记录的403页面都能正常运行。而且,我还亲身经历过(也就是通过浏览器访问服务器上的某个网站)出现403错误,然后重新尝试(刷新页面),就能够得到200。

这台服务器上运行着一些网站(大约十几个),使用了各种不同的解决方案(包括几个WordPress站点、几个旧式PHP应用程序,以及大多数基于Symfony框架的现代应用程序)。

如果有人能够指导我如何增加一些日志的详细程度,帮助我自己解决这个问题,我会非常感激。目前,我只能在虚拟主机的Apache日志中看到403错误。


这些是来自特定的框架/WordPress还是随机来自所有应用程序? - codelogn
@Code_O1logn,在我的情况下,这发生在Prestashop 1.6上。没有激活逃避模式。同一服务器上的其他prestashop网站没有面临这个问题。有什么想法吗? - JazZ
这是我需要解决的问题,它发生在 PHP 7.1 上,我安装了 Apache 模块作为 PHP。在一些特定页面上,随机地抛出 PHP 7.1 异常,但刷新后就消失了。 - codelogn
@Code_O1logn,这里的PHP版本设置为5.6.31。 - JazZ
在我的 error_log 中,报告的错误是“目录索引被禁止”。看起来它随机尝试显示目录索引而不是网页。 - JazZ
显示剩余6条评论
1个回答

5

mod_evasive是否已启用?检查方法如下:

执行命令ls /etc/apache2/mods-enabled/,如果看到mod-evasive.load则表示Apache模块mod-evasive已启用。

该模块的目标是在同一台电脑(IP)发出过多请求或在短时间内浏览过多页面时,使用403请求拒绝访问,并将该IP阻止一段时间。有时刷新页面可以解决问题,但仍然很烦人。

您可以执行以下操作:

1)禁用它,使用以下命令:a2dismod mod-evasiveservice apache2 restart

或者

2)找到httpd.conf文件并修改不同的参数,增加mod_evasive的敏感性阈值,使其不太敏感。

修改默认值,比如:

<IfModule mod_dosevasive.c>

    DOSHashTableSize 3097

    DOSPageCount 5

    DOSSiteCount 100

    DOSPageInterval 1

    DOSSiteInterval 1

    DOSBlockingPeriod 2

</IfModule>

MODEV_DOSPageCount 这是同一页面(或URI)在每个页面间隔内请求的阈值。一旦超过该间隔的阈值,客户端的IP地址将被添加到阻止列表中。

MODEV_DOSPageInterval 页面计数阈值的间隔,默认为1秒间隔。

等等... 您可以更改它们。

所有参数和最佳解决方案都在此处解释

https://wiki.atomicorp.com/wiki/index.php/Mod_evasive


从未使用过mod_evasive,这是我第一次听说它的存在。 - Massimiliano Arione
如果有其他人因为最近的Plesk问题而找到这个答案,这似乎就是解决方法。他们的解决方案:1)通过SSH登录。 2)执行aum -uf ; yum -y remove mod_evasive ; aum -u命令。 3)进入“工具和设置”>“Web应用防火墙”>“设置”,切换到其他规则集,点击应用,再切换回初始规则集并点击应用。 - EpicVoyage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接