调用 CGI 时 lighttpd 中的 500 内部服务器 "C"

500 Internal server in lighttpd while calling CGI written in "C"

服务器是Linux和运行lighttpd “C”中的测试代码如下(test.c)

#include <stdio.h>
int main ()
{
 printf ("Welcome to CGI");
return 0;
}

我编译代码生成如下所示的 CGI

gcc test.c -o test.cgi

我将生成的 test.cgi 文件放在 web/cgi-bin/ 文件夹中,从浏览器 /cgi-bin/test.cgi

访问它时显示以下错误
500 Internal Server Error

日志文件包含

2021-01-04 04:56:32: (../../lighttpd-1.4.53/src/response.c.628) Path         : /filesys/web/cgi-bin/test.cgi
2021-01-04 04:56:32: (../../lighttpd-1.4.53/src/response.c.652) -- logical -> physical
2021-01-04 04:56:32: (../../lighttpd-1.4.53/src/response.c.653) Doc-Root     : /filesys/web/
2021-01-04 04:56:32: (../../lighttpd-1.4.53/src/response.c.654) Basedir      : /filesys/web/
2021-01-04 04:56:32: (../../lighttpd-1.4.53/src/response.c.655) Rel-Path     : /cgi-bin/test.cgi
2021-01-04 04:56:32: (../../lighttpd-1.4.53/src/response.c.656) Path         : /filesys/web/cgi-bin/test.cgi
2021-01-04 04:56:32: (../../lighttpd-1.4.53/src/response.c.668) -- handling physical path
2021-01-04 04:56:32: (../../lighttpd-1.4.53/src/response.c.669) Path         : /filesys/web/cgi-bin/test.cgi
2021-01-04 04:56:32: (../../lighttpd-1.4.53/src/response.c.676) -- handling subrequest
2021-01-04 04:56:32: (../../lighttpd-1.4.53/src/response.c.677) Path         : /filesys/web/cgi-bin/test.cgi
2021-01-04 04:56:32: (../../lighttpd-1.4.53/src/response.c.678) URI          : /cgi-bin/test.cgi
2021-01-04 04:56:32: (../../lighttpd-1.4.53/src/response.c.679) Pathinfo     :
2021-01-04 04:56:32: (../../lighttpd-1.4.53/src/mod_access.c.177) -- mod_access_uri_handler called

如@basile-starynkevitch 所述,您的程序输出不符合(非常简单的)CGI 协议。但是,lighttpd 仍会处理该问题。

您没有分享您的 lighttpd.conf (lighttpd -f /etc/lighttpd/lighttpd.conf -p),所以我猜测您没有正确配置 lighttpd mod_cgi 来处理请求。

Web 服务器所在的用户帐户 运行 应该具有访问路径和文件的文件系统权限,无论您 web/cgi-bin/ 位于何处。

如果这对您不起作用,那么还要检查 SELinux 是否阻止了 CGI 执行。

我已经解决了,所以发布解决方案。 基本上,在与 GCC 不兼容的目标嵌入式设备中执行时存在交叉编译问题。