Lighttpd服务器C语言CGI程序执行失败排查

目录

引言

问题现象

解决方法

结束语


引言

前几天的博客介绍了lighttpd下配置CGI程序的方法:Lighttpd CGI配置:404错误排查实录-优快云博客。学生在实践中又遇到一个问题,就是用C语言编写的CGI程序不知道为什么总是不能执行。

问题现象

我编写了一个最简单的CGI程序来说明问题。

#include <stdio.h>
#include <stdlib.h>

int main()
{
	printf("Content-Type: text\r\n\r\n");
	printf("Hello from cgi program\r\n");
	return 0;
}

 使用下面的命令行进行编译:

arm-none-linux-gnueabi-gcc -o hello.cgi hello.c

然后在开发板上部署这个程序,可以现在命令行运行一下。

 

程序可以正常运行。

然后在浏览器中访问CGI程序就没有任何反应了。用Wireshark抓包,可以看到lighttpd返回200 OK,但是没有任何内容。

从返回的Content-length看出是0。 

解决方法

在上一篇博文提到,修改/var/lighttpd/config/conf.d/cgi.conf文件,以指定 Bash 脚本作为 CGI 处理程序。

#######################################################################
##
##  CGI modules
## ---------------
##
## http://www.lighttpd.net/documentation/cgi.html
##
server.modules += ( "mod_cgi" )
 
##
## Plain old CGI handling
##
## For PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini.
##
cgi.assign                 = ( ".pl"  => "/usr/bin/perl",
                               ".cgi" => "/bin/bash",
                               ".rb"  => "/usr/bin/ruby",
                               ".erb" => "/usr/bin/eruby",
                               ".py"  => "/usr/bin/python" )

上一个例子和此次有点不同。上次是用Shell脚本写了cgi程序,在脚本中调用的C语言生成的可执行文件,而这次是直接用C语言生成了可执行文件。如果 还用这个配置文件,就意味着C语言生成的可执行程序被当做shell脚本运行,所以不会返回预期的结果。

所以要修改一下配置文件,增加一行:

cgi.assign                 = ( ".pl"  => "/usr/bin/perl",
                               ".cgi" => "/bin/bash",
			       ".prg" => "",
                               ".rb"  => "/usr/bin/ruby",
                               ".erb" => "/usr/bin/eruby",
                               ".py"  => "/usr/bin/python" )

增加的这一行意思是对于扩展名为.prg的cgi程序,直接当做可执行程序运行。然后把cgi程序改为hello.prg,再执行就对了。

 

结束语

希望这些内容能为您带来启发或帮助。如果您有任何疑问或想法,欢迎在评论区交流分享。

感谢阅读,期待下次与您相遇!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神一样的老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值