安装 mod_fcgid 后,我试图让旧的 Perl 脚本再次运行。我不得不为新客户端安装 mod_fcgid,但它似乎破坏了我的其他一些 cgi 脚本。
转到该页面时,现在出现 500 错误。我检查了错误日志,脚本的输出在错误日志中...因此脚本正在运行,但由于某种原因,它仍然向浏览器发送 500 内部服务器错误...
HTML 标题是首先打印的内容……所以我真的不确定为什么会发生这个错误。
错误日志:
[省略:html 输出] [2010 年 12 月 8 日,星期三 08:59:18] [警告](104)对端重置连接:mod_fcgid:从 fastcgi 服务器读取数据时出错。 [2010 年 12 月 8 日,星期三 08:59:18] [错误] [客户端 xxxx] 脚本标头过早结束:www_protect.cgi,引用者:http://www.mywebsite.net/ [2010 年 12 月 8 日星期三 08:59:21] [通知] mod_fcgid:进程 /www/sites/somescript.cgi(6747) exit(通信错误),通过调用 exit() 终止,返回代码:0
fcgi.conf:
添加处理程序 fcgid 脚本 .fcgi .cgi #Socket路径 /var/lib/apache2/fcgid/sock IPC连接超时 45 IPCComm超时 20 输出缓冲区大小 0 每个进程的最大请求数 500 空闲超时 3600 进程寿命 7200 最大进程数 8 默认最大类进程数 2 # 放置套接字和共享内存文件的理想位置 套接字路径 /var/run/mod_fcgid 共享内存路径 /var/run/mod_fcgid/fcgid_shm
答案1
您的配置告诉 Apache 在 FastCGI 下提供所有 CGI 脚本,但这是不可能的。FastCGI 不直接兼容 CGI 脚本。
您应该将 AddHandler 指令移到客户端的 VirtualHost 中,这样它就不会适用于整个配置,例如
<VirtualHost *:80>
ServerName clienthost.com
...
AddHandler fcgid-script .fcgi .cgi
</VirtualHost>
如果你的客户端脚本与你的其他 cgi 脚本位于同一个 VirtualHost 上,你可以将 FastCGI 处理限制到特定的位置或目录,例如
<Location /clientarea>
AddHandler fcgid-script .fcgi .cgi
</Location>