![mod_fcgid:从 FastCGI 服务器读取数据时出错](https://linux22.com/image/678771/mod_fcgid%EF%BC%9A%E4%BB%8E%20FastCGI%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%BB%E5%8F%96%E6%95%B0%E6%8D%AE%E6%97%B6%E5%87%BA%E9%94%99.png)
这是我在这里的第一篇帖子,尽管我经常在这里搜索并寻找答案。这次我花了几天时间搜索各种网站,但不幸的是,其他帖子中的答案对我的情况没有帮助。
我管理着几台 LAMP 服务器,每台服务器托管大约 10 到 15 个虚拟主机。每台服务器都有一个控制面板,供管理员和客户管理网站。过去几年,它在带有 mod_php 的 Centos 6 上运行良好。
我现在正在升级控制面板以在 Centos 7 上运行,并将 PHP 安装为 mod_fcgid。
每个虚拟主机都有自己的 apache conf 文件,如下所示:
<VirtualHost 136.243.195.117:80>
DocumentRoot "/home/c7demose/public_html"
ServerName c7.demoserver.co.za
ServerAlias www.c7.demoserver.co.za mail.c7.demoserver.co.za ftp.c7.demoserver.co.za
<IfModule mod_fcgid.c>
SuexecUserGroup c7demose c7demose
<Directory /home/c7demose/public_html>
Options +ExecCGI
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/php-fcgi-scripts/c7.demoserver.co.za/php-fcgi-starter .php
Order allow,deny
Allow from all
</Directory>
</IfModule>
</VirtualHost>
这没有问题,每个站点都按预期运行。过去的工作方式是控制面板监听不同的端口,其 vhost 配置文件监听任何 IP 地址,并且没有 ServerName 变量,因此无论用户使用哪个域名,只要他们使用正确的端口,它就会重定向到控制面板。
换句话说,具有域 user_one.com 的用户可以访问 user_one.com:10025,而用户二可以访问他自己的 user_two.com:10025,并且两者都可以进入控制面板:
<VirtualHost *:10025>
DocumentRoot "/var/www/html/webcp"
<IfModule mod_fcgid.c>
SuexecUserGroup apache apache
<Directory /var/www/html/webcp>
Options +ExecCGI
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/php-fcgi-scripts/localhost/php-fcgi-starter .php
Order allow,deny
Allow from all
</Directory>
</IfModule>
</VirtualHost>
在旧设置中使用 mod_php 时,此方法运行良好。使用 mod_fcgid 时,在这种“全部捕获”情况下尝试访问控制面板时,此方法不起作用。
浏览器显示 500 内部错误,并且 httpd 错误日志显示以下内容:
[Mon Mar 14 00:06:03.684684 2016] [authz_core:debug] [pid 2585] mod_authz_core.c(809): [client 165.255.92.82:40036] AH01626: authorization result of Require all granted: granted
[Mon Mar 14 00:06:03.684725 2016] [authz_core:debug] [pid 2585] mod_authz_core.c(809): [client 165.255.92.82:40036] AH01626: authorization result of <RequireAny>: granted
[Mon Mar 14 00:06:03.783142 2016] [authz_core:debug] [pid 2585] mod_authz_core.c(809): [client 165.255.92.82:40036] AH01626: authorization result of Require all granted: granted
[Mon Mar 14 00:06:03.783178 2016] [authz_core:debug] [pid 2585] mod_authz_core.c(809): [client 165.255.92.82:40036] AH01626: authorization result of <RequireAny>: granted
[Mon Mar 14 00:06:03.785111 2016] [fcgid:info] [pid 2581] mod_fcgid: server c7.demoserver.co.za:/var/www/php-fcgi-scripts/localhost/php-fcgi-starter(11458) started
[Mon Mar 14 00:06:03.790277 2016] [fcgid:warn] [pid 2585] (104)Connection reset by peer: [client 165.255.92.82:40036] mod_fcgid: error reading data from FastCGI server
[Mon Mar 14 00:06:03.790305 2016] [core:error] [pid 2585] [client 165.255.92.82:40036] End of script output before headers: index.php
[Mon Mar 14 00:06:09.790430 2016] [fcgid:info] [pid 2581] mod_fcgid: process /var/www/php-fcgi-scripts/localhost/php-fcgi-starter(11458) exit(communication error), terminated by calling exit(), return code: 107
理想情况下,我希望所有这些都与 fast_cgi 一起工作,但如果有一种方法可以使虚拟主机继续使用 fcgi 运行,并且只让端口 10025 上的控制面板使用 mod_php 运行,那么这将是一个可接受的临时解决方案,我只是不知道如何实现,甚至不知道是否可能。
提前致谢!
约翰