如何设置apache运行fastCGI程序的权限?

如何设置apache运行fastCGI程序的权限?

我正在尝试让 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>

让服务器管理连接。我仍未弄清楚上面遇到的权限问题,但现在一切都按我想要的方式运行。

相关内容