调用 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 不兼容的目标嵌入式设备中执行时存在交叉编译问题。
服务器是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 不兼容的目标嵌入式设备中执行时存在交叉编译问题。