如果仅在一个网站上收到错误ERR_CONNECTION_RESET,则很可能服务器端出了点问题。
接收随机ERR_CONNECTION_RESET
几周前,我的一位同事向我抱怨:有时,当他使用WordPress主题编辑器时,他要么收到一个空HTML页面,要么无法加载某些JavaScript。
我能够重复这个问题。在重新加载WordPress主题编辑器三到五次后,Chrome的Web开发人员控制台显示了net :: 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文章,并查看所涉及的系统及其日志文件。全部都在那里。