嵌入式单板--BOA服务器报错:502 Bad Gateway The CGI was not CGI/1.1 compliant. 原因分析
一、BOA简介1、Boa是一个非常小巧的Linux Web服务器,可执行代码只约60KB。2、Boa是一个单任务Web服务器,只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa能够为CGI的程序执行fork出一个新的子进程。3、Boa 的设计目标是速度和安全,在其站点公布的性能测试中,Boa的某些性能还要好于Apache服务器。二、CGI简介CGI--公共网.......
一、BOA简介
1、BOA是一个非常小巧的Linux Web服务器,可执行代码只约60kB。
2、BOA是一个单任务Web服务器,只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但BOA能够为请求对应的CGI程序fork出一个新的子进程。
3、BOA 的设计目标是速度和安全,在其站点公布的性能测试中,BOA的某些性能还要好于Apache服务器。
二、CGI简介
CGI--公共网关接口(Common Gateway Interface) 是WWW技术中最重要的技术之一。CGI是外部应用程序(CGI程序或 CGI 脚本)与Web服务器之间的接口标准。CGI规范允许Web服务器执行外部程序,并将结果返回给Web浏览器。绝大多数的CGI程序被用于解释处理来自HTML表单的输入信息,并在服务器产生相应的处理或将相应的结果返回给浏览器。CGI程序使网页具有了交互功能。
三、问题分析
1、问题:
在Web浏览器返回结果:502 Bad Gateway The CGI was not CGI/1.1 compliant。在目标板的调试终端中输出下述错误:……cgi_header:unable to find LFIF
2、前提条件:BOA的配置是OK的
BOA的配置文件是boa.conf,注意要根据目标板的实际目录来配制,以下我在配置时修改的地方:
(1)Port 80
(2)DocumentRoot /root/web
(3)MimeTypes /root/web/mime.types
(4)ScriptAlias /cgi-bin/ /root/web/cgi-bin/
(5)SinglePostLimit 30720000 ---太小会导致上传下载文件大小受限
3、分析:Http请求---->BOA---->CGI程序---->Http响应,根据这个请求流程来分析(BOA一般不会有问题,主要是CGI程序)
(1)CGI程序交叉编译时:BOA和CGI一般用于嵌入式ARM单板,所以要保证CGI程序是经过交叉编译过的,才能在ARM单板运行;如果CGI程序无法运行会报这个错误。
(2)CGI程序的执行权限:在Linux中要运行一个执行程序,需要给权限的;如chmod -R 777 xxxx.cgi;如果忘记加执行权限会导致程序无法被Linux启动,也会报这个错误。
(3)CGI程序接收Http请求时:Http请求一般用GET方法把参数送给CGI程序,需要注意GET参数是否过长、是否有特殊字符,这些会导致CGI程序解析参数时没有足够的字符串空间或解析出错,也会报这个错误。
(4)CGI程序内部处理异常:CGI程序是以BOA的一个子进程在运行,如果内部处理发生异常崩溃退出,没有CGI程序把结果返回给Web浏览器,也会报这个错误。
(5)CGI程序返回结果时:CGI程序是通过标准输出将字符串″Contenttype:text/plain\n\n″传送给Web服务器的,这是一个MIME头信息,告诉Web服务器随后的输出是以纯ASCII文本的形式。【注意在这个头信息中有两个换行符】,这是因为Web服务器需要在实际的文本信息开始之前先看见一个空行。如果CGI程序返回结果不按照这种方式输出一个空行,也会报这个错误。
4、从开始的Http请求到最后的Http响应,是沿着请求流程进行分析,原则还是:BOA一般不会有内部问题,主要是自己开发的CGI程序有逻辑问题、指针内存问题、没有注意一些细节;通过排除法缩小问题范围,在小范围内走读代码日志跟踪。
更多推荐
所有评论(0)