我正在尝试让 Apache2.4 在基于 Ubuntu 14.04 的系统上运行已编译的 fastcgi 程序。我正在使用 mod_fastcgi,但出现了错误
FastCGI: can't start server "/var/www/fcgi/fhello.fcgi" (pid 29037), execle() failed: Permission denied
[Sun Jun 14 14:16:23.322632 2015] [:warn] [pid 29022] FastCGI: server "/var/www/fcgi/fhello.fcgi" (pid 29037) terminated by calling exit with status '255'
我的 apache 配置块看起来像
<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi
FastCgiWrapper /var/lib/apache2/fastcgi
FastCgiServer /var/www/fcgi/fhello.fcgi -socket /var/www/fcgi/fhello.sock -user www-data -group www-data
ScriptAlias /fhello "/var/www/fcgi/fhello.fcgi"
<Directory /var/www/fgci>
Require all granted
Options ExecCGI
</Directory>
</IfModule>
如果它有助于 fhello 代码是
#include "fcgi_stdio.h" /* fcgi library; put it first*/
#include <stdlib.h>
int count;
void initialize(void) {
count=0;
}
int main(void) {
/* Initialization. */
initialize();
/* Response loop. */
while (FCGI_Accept() >= 0) {
printf("Content-type: text/html\r\n"
"\r\n"
"<title>FastCGI Hello! (C, fcgi_stdio library)</title>"
"<h1>FastCGI Hello! (C, fcgi_stdio library)</h1>"
"Request number %d running on host <i>%s</i>\n",
++count, getenv("SERVER_HOSTNAME"));
}
return 0;
}
www-data 拥有并具有该程序的执行权限,并且对 sock 文件的 fcgi 目录具有写入权限。这是我第一次设置除 perl 之外的任何东西以 fastcgi 形式运行,而且我似乎缺乏 google-fu 来查找有关此主题的有效信息。
如果有人能指出我做错什么或者我遗漏了什么,请这样做。
答案1
因此,在对我使用的代码片段进行了一些处理之后,getenv("SERVER_HOSTNAME")
看到了段错误
"Request number %d running on host <i>%s</i>\n",
++count, getenv("SERVER_HOSTNAME"));
所以我用(也修复了 html)替换了它
"Request number %d running on host <i>host</i></body></html>\n",
++count);
在 apache 配置中我将其简化为
<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi
FastCgiServer /var/www/fcgi/fhello.fcgi
ScriptAlias /fhello.fcgi "/var/www/fcgi/fhello.fcgi"
</IfModule>
让服务器管理连接。我仍未弄清楚上面遇到的权限问题,但现在一切都按我想要的方式运行。