随机 PHP FastCGI / 连接被对等方重置 / 不完整的标头

2024-03-17

我一直在随机500 Internal Server我在各种共享主机上基于 PHP/MySQL 的网站上出现错误。我在共享 Linux 服务器上通过 CGI/FastCGI 使用 PHP 5.2.17。当我查看日志时,我看到以下内容:

[error] [client 75.71.176.224] (104)Connection reset by peer: FastCGI: comm with server "/dev/shm/blackmou-php.fcgi" aborted: read failed, referer: ...
[error] [client 75.71.176.224] FastCGI: incomplete headers (0 bytes) received from server "/dev/shm/blackmou-php.fcgi", referer:  ...
[error] [client 75.71.176.224] (104)Connection reset by peer: FastCGI: comm with server "/dev/shm/blackmou-php.fcgi" aborted: read failed, referer:  ...
[error] [client 75.71.176.224] FastCGI: incomplete headers (0 bytes) received from server "/dev/shm/blackmou-php.fcgi", referer:  ...

有人知道如何解决这个问题吗?


这个问题通常不仅仅是主机特定的,它也与开发人员相关,具​​体取决于配置。 然而,有些主机对 FastCGI 相当严格,会限制您的能力。 通常,不使用 FastCGI 并使用 mod_php 更容易运行,除非您有在应用程序中使用 FastCGI 的特定需要。

我们需要查看您的 fcgi 包装器(/dev/shm/blackmou-php.fcgi 中的内容)或用于 FastCGI 生成的 .htaccess,以便在不知道问题发生在哪些文件以及这些文件上的代码的情况下更好地帮助您。 另外,您的主机是否使用 Apache、LightHttpd 或 Nginx(或组合)? 那时我强烈建议更新使用 PHP 5.3.9+

由于这可能是由多种问题引起的,FastCGI 可以有效防止您的站点/脚本受到拒绝服务攻击或由于内存泄漏等而崩溃。 (例如:尝试通过简单地丢弃和限制请求数量来处理 80,000 个连接,或者通过超时和终止进程陷入无限循环)

该错误通常是由空闲超时(默认为 30 秒)或最大子进程限制引起的。 这也可能是由于某人启动了长时间运行的脚本并在脚本完成之前关闭了浏览器/连接而引起的。

FastCGI 启动其进程包装器,执行命令,在完成进程之前超时,连接被视为由对等方重置。

另一个例子是达到了最大子进程数 (maxProcesses)(例如:许多网站以 2 或 4 个为例,而实际上您可能需要 20 或 50 个,具体取决于平均流量) 如果所有子进程当前都处于活动状态并且进行了额外的请求/连接,则子进程仅限于 maxProcesses,FastCGI 将不会共享活动子进程,因此它必须首先终止进程并启动新的子进程,或者删除请求,具体取决于您的配置。

以下是有关设置的更多信息:

http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html

http://www.fastcgi.com/drupal/node/10 http://www.fastcgi.com/drupal/node/10

包装示例

PHP_FCGI_CHILDREN=0 #no limit
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_MAX_REQUESTS

UPDATE

除此之外,这也可能是由 php 内存限制引起的

如果上述方法不能解决您的问题,请更新您的 php.ini 以增加内存限制

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

随机 PHP FastCGI / 连接被对等方重置 / 不完整的标头 的相关文章

随机推荐