一、环境
BOA、C、CGI、HTML、linux(ubuntu)。
二、问题
html网页模板显示正常,但是cgi程序无法正常显示。
网页报错:
“502 Bad Gateway
The CGI was not CGI/1.1 compliant.“
错误日志:
cgi header:unable to find LFLF
三、报错的几种可能性及解决方法
修改好配置文件后,重启一下boa。
//找到boa进程对应的pid,记住
ps -e | grep boa //回车
//结束进程
kill PID //PID为你刚刚找到的boa的pid,回车
//启动boa
//在有boa执行程序的目录下输入
./boa //回车
//查看boa是否已经启动
ps -e | grep boa //回车
1、cgi以及所在目录的执行权限不足
解决办法:
在需赋予的所在目录下输入:
sudo chmod 755 fileneme
//filename为你需要赋予的文件权限的文件名
刷新页面即可
2、boa.conf文件cgi路径配置
打开boa.conf文件,查看这段代码:
ScriptAlias /cgi-bin/ /etc/boa/www/cgi-bin/
①查看所编写的cgi程序是否在/etc/boa/www/cgi-bin目录下,如果不存在,则更改为自己的目录, ②或者把cgi文件移至/etc/boa/www/cgi-bin/目录下。
结束后刷新页面查看是否成功。
3、代码问题
CGI脚本的结束标志缺失,影响了服务器正确解析HTTP头。
例子:
可能你的代码在解析http头的时候没按照固定格式来,即在text/html后面加上\n\n。即:
printf("content-type:text/html");
改为:
printf("content-type:text/html\n\n");
重新编译成.cgi放回原路径即可(记得要重新赋予权限)。
操作成功后,刷新页面
4、编译问题
①改为静态编译:
gcc -o filename.cgi filename.c -static
如若不行则方法②
②在开发的时候被公司指定编译链(我的为arm-linux-gnueabihf-gcc)
编译的方法不是gcc开头了,而是
arm-linux-gnueabihf-gcc -o test.cgi test.c
编译好后粘贴到目标目录下,刷新即可。
评论区见