Plesk 出现 502 Bad Gateway 的解决办法

早上突然发现网站出现 502 Bad Gateway 的 Nginx 提示,我以为是 Apache 服务宕掉了,进入 Plesk 后台,在服务管理里面,发现 Apache 和 Nginx 服务都是运行中,并且把这两个服务重启之后,故障依旧。

我网上搜了一下,发现 fail2ban 会导致此错误,我查看了 fail2ban,发现本机的内网 IP 地址被 plesk-apache-badbot 拦截了。

解决方法很简单,把 IP 添加到“可信任的 IP 地址”即可。

plesk apache badbot 导致 Plesk 出现 502 bad gateway 错误

稍微研究了一番,发现 plesk-apache-badbot 是分析网站的访问日志,然后阻止垃圾邮件和网络爬虫,我们可以在“管理过滤器”里面看到具体的规则,发现规则里面有好几条与搜狗蜘蛛有关的,但与这次遇到的问题应该没有关系。

问题来了,如果匹配了蜘蛛,那么阻止的应该是蜘蛛的 IP,怎么会把本机的内网 IP 给屏蔽了?发现 plesk-apache-badbot 不仅仅分析了网站的访问日志(/var/www/vhosts/system/*/logs/*access*log),还分析了 Apache 的访问日志(/var/log/httpd/*access_log),原来,直接访问服务器的外网 IP 地址,会在 Apache 的访问日志中增加一条访问记录,IP 记录为服务器的内网 IP 地址,因此我怀疑是一些扫描器,伪装成蜘蛛,扫描了我的 IP,然后被 plesk-apache-badbot 匹配,就被屏蔽了。

那么另外一个问题又来了,Plesk 前端是 Nginx,再把请求给 Apache,直接访问服务器的 IP,到底是 Apache 还是 Nginx 进行回应?

通过 curl -I 查看到,server 是 nginx,那么,是不是在直接 IP 访问的时候,nginx 没有把源 IP 传递给 Apache 导致的呢?

查看了 nginx 的 access log (/var/log/nginx/access.log),发现日志中记录的是访问者的 IP,那怀疑,nginx 在请求 Apache 的时候,没有把源 IP 传递给 Apache,而是把自己的 IP 传递给了 Apache 了。

不知道我的分析是否正确,还是 Plesk 的 bug,目前的解决办法就是把 IP 添加到“可信任的 IP 地址”。对于直接访问 IP 的情况,在 Plesk 安全设置文章中有介绍,可以隐藏真实情况,伪装成 Windows 的服务器。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>