在 cPanel WHM 中切换到 fcgi 时出现 500 错误

在 cPanel WHM 中切换到 fcgi 时出现 500 错误

我正在尝试在 CentOS 5.7 x64 服务器上从 DSO 切换到 fcgi。我按照 cPanel 文档的建议在 cPanel 中执行了此操作。

当我尝试访问该网站时,我立即收到 500 个内部服务器错误。

检查我的 Apache 错误日志后,我看到以下内容:

[Wed Feb 01 19:00:40 2012] [notice] Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4 mod_fcgid/2.3.6 configured -- resuming normal operations
[Wed Feb 01 19:00:41 2012] [notice] caught SIGTERM, shutting down
[Wed Feb 01 19:00:42 2012] [notice] suEXEC mechanism enabled (wrapper: /usr/local/apache/bin/suexec)
[Wed Feb 01 19:00:42 2012] [notice] Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4 mod_fcgid/2.3.6 configured -- resuming normal operations
[Wed Feb 01 19:04:42 2012] [notice] Graceful restart requested, doing restart
[Wed Feb 01 19:04:42 2012] [notice] Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4 mod_fcgid/2.3.6 configured -- resuming normal operations

切换回 DSO 可以使一切再次正常工作。

我如何让它与 fcgi 一起工作?

答案1

通过 WHM 默认安装的 FastCGI 在安装后无法使用。他们不告诉你这一点真是太愚蠢了,甚至有点危险,因为它似乎会自动运行,就像你通过这种方式安装的几乎所有其他东西一样。

原因很简单 - WHM 安装过程中没有创建 FastCGI 配置文件。这导致 FastCGI 具有愚蠢/危险的默认设置,从而导致大量 500 错误,并且单个用户只需运行带有一些代码错误的 PHP 文件或获得大量流量就可能使整个服务器崩溃。

无论如何,解决方案也很简单。编辑/etc/httpd/conf/php.conf并添加以下内容:

MaxRequestsPerProcess 1000
FcgidMaxProcesses 200
FcgidProcessLifeTime 7200
MaxProcessCount 500
FcgidIOTimeout 400
FcgidIdleTimeout 600
FcgidIdleScanInterval 90
FcgidBusyTimeout 300
FcgidBusyScanInterval 80
ErrorScanInterval 3
ZombieScanInterval 3
DefaultMinClassProcessCount 0
DefaultMaxClassProcessCount 3
MaxRequestLen 20468982

您可以谷歌搜索每个设置以更好地理解它们并找到适合您的服务器的值,但即使只是复制上述内容也比使用没有配置文件的默认设置要好得多。

PS. 遗憾的是,每次更新 Apache、PHP 或 MySQL 时,此文件都会被重置,因此请保留一份备份,以便在每次更新后恢复。

答案2

请注意,您也可以将其包含在 cPanel 的 Post VirtualHost Include 中。这可以通过 WHM 完成,方法是选择“Apache Configuration”->“Include Editor”。然后在“Post VirtualHost Include”下的下拉菜单中选择“All Versions”。

然后你应该像这样设置你的 FCGI 配置:

<IfModule mod_fcgid.c>
FcgidProcessLifeTime 8200
FcgidIOTimeout 8200
FcgidIdleTimeout 60
...
</IfModule>

这样,每次 cPanel 更新时它就不会被覆盖。

相关内容