使用技巧

在WordPress中诊断和修复ERR_CONNECTION_RESET错误

如果仅在一个网站上收到错误ERR_CONNECTION_RESET,则很可能服务器端出了点问题。

接收随机ERR_CONNECTION_RESET

几周前,我的一位同事向我抱怨:有时,当他使用WordPress主题编辑器时,他要么收到一个空HTML页面,要么无法加载某些JavaScript。

我能够重复这个问题。在重新加载WordPress主题编辑器三到五次后,Chrome的Web开发人员控制台显示了net :: ERR_CONNECTION_RESET错误。

净:: ERR_CONNECTION_RESET

文档的检索字节总是不同的。

在每个请求上检索到不同的字节大小

ERR_CONNECTION_RESET表示TCP堆栈出现问题,并且我们的客户端/浏览器未收到预期的数据包。

在同一台服务器上还有另一个没有任何问题的WordPress实例。我和我的同事通过使用其他互联网提供商收到了ERR_CONNECTION_RESET

这些事实使我得出的结论是,这可能不是一些奇怪的MTU问题,但Web服务器/ PHP / WordPress设置有问题。

挖掘日志文件

我手上没有任何日志,所以我不得不打开支持通知单。我希望支持服务会问我所有问题,您通常会在搜索该问题时找到问题(与您的网络提供商联系吗?)。我并不感到失望。

最后,我询问了Apache的error_log以及它是否包含Segfault的任何提示。支持人员给了我一些摘录。第一个摘录来自Apache的error_log

FastCGI: too much stderr received from server /path-to-instance/php74-fpm", increase FCGI_SERVER_MAX_STDERR_LINE_LEN (1023) and rebuild or use "\\n" to terminate lines, referer: https://wordpress-instance/wordpress/wp-admin/themes.php

第二个来自PHP-FPM的日志:

NOTICE: PHP message: PHP Notice:  Trying to access array offset on value of type bool in /www/htdocs/path-to-instance/wordpress/wp-content/plugins/wp-statistics/includes/classes/class-wp-statistics-widget.php

NOTICE: PHP message: PHP Notice:  Array to string conversion in /www/htdocs/path-to-instance/wordpress/wp-includes/formatting.php

这些消息一遍又一遍地重复。

因为我之前已经禁用了每个WordPress插件,所以可以排除wp-statistics插件中的一个硬错误。

掌握了这些信息后,我得出以下结论:由于PHP的注意,PHP-FPM向Apache发送了很多邮件。收到1023条线路后,该过程终止。

减少PHP的通知数

最后,解决ERR_CONNECTION_RESET问题很容易。我将WordPress的error_reporting更改为E_ALL和〜E_NOTICE

error_reporting(E_ALL & ~E_NOTICE);

更改error_reporting后,已记录的行数减少为0,并且一切正常。

包起来

这一集是一个经典示例,说明了如何仅通过手握日志就可以得出解决方案。跳过所有有关“如何修复XYZ”的clickbaity文章,并查看所涉及的系统及其日志文件。全部都在那里。