您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > linux下的webserver-BOA及CGIC库的使用指南
业精于勤,荒于嬉;行成于思,毁于随linux下的webserverBOA及CGIC库的使用指南我把网页挂载到nfs下面的文件中(需要新建一个文件),不过这样很方便!安装过程==========================================================1)在并解压#tar-zxvfboa-0.94.13.tar.gz2)在src目录下运行./configure3)生成Makefile文件,修改CC=arm-linux-gccCPP=arm-linux-gcc–E(1)将boa.c文件中以下几行判断去掉即可。if(setuid(0)!=-1){DIE(ickyLinuxkernelbug!);}(2)修改文件compat.hP120#defineTIMEZONE_OFFSET(foo)foo##-tm_gmtoff修改成#defineTIMEZONE_OFFSET(foo)(foo)-tm_gmtoff(3)把src文件夹下的config.c里的if(!server_name){..........}(大概在266行到286行之间)注释掉否则Error:./boagethostbyname::Resourcetemporarilyunavailable(4)修改src/log.c注释掉if(dup2(error_log,STDERR_FILENO)==-1){DIE(unabletodup2theerrorlog);}否则会出现错误:log.c:73unabletodup2theerrorlog:badfiledescriptor改变板子的属性,为可写:执行一个命令就可以变成可写的好象是chmod777自动启动boa:在/etc/profile中启动boa即可4)make5)执行arm-linux-stripboa去掉调试信息,小很多,50多k可以编译出boa可执行文件,下面是对文件系统的修改(1)建立/etc/boa/boa.conf可以从boa源码里拷贝boa.conf(2)修改boa.conf文件,以下为转载**********************************************************#监听的端口号,缺省都是80,一般无需修改Port80#bind调用的IP地址,一般注释掉,表明绑定到INADDR_ANY,通配于服务器的所有IP地址#Listen192.68.0.5User0Group0#当服务器发生问题时发送报警的email地址,目前未用,注释掉#ServerAdminroot@localhost#错误日志文件。如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,则用#/dev/null。在下面设置时,注意一定要建立/var/log/boa目录ErrorLog/mnt/log/boa/error_log#访问日志文件。如果没有以/开始,则表示从服务器的根路径开始。如果不需要错误日志,则用#/dev/null或直接注释掉。在下面设置时,注意一定要建立/var/log/boa目录#AccessLog/var/log/boa/access_log#是否使用本地时间。如果没有注释掉,则使用本地时间。注释掉则使用UTC时间#UseLocaltime#是否记录CGI运行信息,如果没有注释掉,则记录,注释掉则不记录#VerboseCGILogs#服务器名字ServerName是否启动虚拟主机功能,即设备可以有多个网络接口,每个接口都可以拥有一个虚拟的Web服#务器。一般注释掉,即不需要启动#VirtualHost#非常重要,HTML文档的主目录。如果没有以/开始,则表示从服务器的根路径开始。DocumentRoot/var/如果收到一个用户请求的话,在用户主目录后再增加的目录名UserDirpublic_html#HTML目录索引的文件名,也是没有用户只指明访问目录时返回的文件名DirectoryIndexindex.html#当HTML目录没有索引文件时,用户只指明访问目录时,boa会调用该程序生成索引文件然后#返回给用户,因为该过程比较慢最好不执行,可以注释掉或者给每个HTML目录加上#DirectoryIndex指明的文件#DirectoryMaker/usr/lib/boa/boa_indexer#如果DirectoryIndex不存在,并且DirectoryMaker被注释,那么就用Boa自带的索引#生成程序来生成目录的索引文件并输出到下面目录,该目录必须是Boa能读写#DirectoryCache/var/spool/boa/dircache#一个连接所允许的HTTP持续作用请求最大数目,注释或设为0都将关闭HTTP持续作用KeepAliveMax1000#HTTP持续作用中服务器在两次请求之间等待的时间数,以秒为单位,超时将关闭连接KeepAliveTimeout10#指明mime.types文件位置。如果没有以/开始,则表示从服务器的根路径开始。可以注释掉#避免使用mime.types文件,此时需要用AddType在本文件里指明MimeTypes/etc/mime.types#文件扩展名没有或未知的话,使用的缺省MIME类型DefaultTypetext/plain#提供CGI程序的PATH环境变量值CGIPath/bin:/usr/bin:/usr/local/bin#将文件扩展名和MIME类型关联起来,和mime.types文件作用一样。如果用mime.types#文件,则注释掉,如果不使用mime.types文件,则必须使用#AddTypeapplication/x-httpd-cgicgi#指明文档重定向路径#Redirect/bar为路径加上别名Alias/doc/usr/doc#非常重要,指明CGI脚本的虚拟路径对应的实际路径。一般所有的CGI脚本都要放在实际路径#里,用户访问执行时输入站点+虚拟路径+CGI脚本名ScriptAlias/cgi-bin//mnt/用户可以根据自己需要,对boa.conf进行修改,但必须要保证其他的辅助文件和设置必须和boa.conf里的配置相符,不然Boa就不能正常工作。在上面的例子中,我们还需要创建日志文件所在目录/mnt/log/boa,创建HTML文档的主目录/mnt/,将mime.types文件拷贝到/etc目录,创建CGI脚本所在目录/var/mnt/cgi-bin/。mime.types文件用来指明不同文件扩展名对应的MIME类型,一般可以直接从Linux主机上拷贝一个,大部分也都是在主机的/etc目录下。**********************************************************我做的修改DocumentRoot/mnt/目录,需手动建立ScriptAlias/cgi-bin//mnt/目录,需手动建立Group0(3)etc目录里还要有passwdgroupmime.types等文件放在/etc下面,boa.conf放在/etc/boa文件夹下,可执行文件boa放在/bin下面,文件系统新添加了mnt,把放进去,编译文件系统CRAMFS,烧录…(注:这样烧录的话,文件都是只读的,可以把1:/bin/mkdir/tmp/fs2:/bin/mount-tyaffs/dev/mtdblock/3/tmp/fs;这样就mount上一个可读可写的文件,掉电还在;问题是:我mount出错,有badblock)(4)在板子上运行boa(5)pc机用IE访问(2)编辑helloworld.c程序测试cgi的运行#arm-linux-gcc-ohelloworld.cgihelloworld.c#cphelloworld.cgi到开发板的/var/目录下在pc机的浏览器地址栏输入,可以看到相关页面,CGI脚本测试通过。10.从CGIC的主站点下载源码,将其解压并进入源码目录#tar-zxvfcgic205.tar.gz#cdcgic20511.修改Makefile文件a.找到CC=gcc,将其改成CC=arm-linux-gcc,b.找到AR=ar,将其改成AR=arm-linux-ar,c.找到RANLIB=ranlib,将其改成RANLIB=arm-linux-ranlib。e.找到gcccgictest.o-ocgictest.cgi${LIBS},将其改成$(CC)$(CFLAGS)cgictest.o-ocgictest.cgi${LIBS},f.找到gcccapture.o-ocapture${LIBS},将其改成$(CC)$(CFLAGS)capture.o-ocapture${LIBS},保存退出。12.然后运行make进行编译,得到的CGIC库libcgic.a,我们通过调试辅助程序capture和测试程序cgictest.cgi,来验证生成CGIC库的正确性。13.将capture和cgictest.cgi拷贝到主机的/var/目录下。在工作站的浏览器地址栏输入,可以看到页面,CGIC库和测试脚本都移植成功。将.cgi文件拷贝至目标板上后,必须改变其权限chmod755*否则,上位机浏览时会提示502BadGatewayTheCGIwasnotCGI/1.1compliant.(2)不能上传的话,把GET改成POST把用户权限由nobody改成root用C/C++写CGI程序其实用C/C++写CGI程序非常简单,主要是要清楚什么是CGI。CGI全称CommonGatewayInterface(共同编程接口),是一种编程接口,不论什么语言,只要按照该接口的标准编写出来的程序,即可叫做CGI程序。CGI程序的输入/输出是使用编程语言的标准输入/标准输出,所以用C/C++来写CGI程序就好象写普通程序一样,不过还有几样东西要注意的。1、CGI程序的通信方式当有数据从浏览器传到Web服务器后,该服务器会根据传送的类型(基本有二类:GET/POST),将这些接收到的数据传入QUERY_STRING或变量中,CGI程序可以通过标准输入,在程序中接收这些数据。当要向浏览器发送信息时,只要向Web服务器发送特定的文件头信息,即可通过标准输出将信息发往Web服务器,Web服务器处理完这些由CGI程序发来的信息后就会将这些信息发送给浏览器。这样就是CGI程序的通信方式了。2、接收数据用GET方式接收到的数据保存在Web服务器的QUERY_STRING变量里,而通过POST方式接收到的数据是保存在这个Web服务器变量里。它们的唯一区别就是:以GET方式接收的数据是有长度限制,而用POST方式接收的数据是没有长度限制的。并且,以GET方式发送数据,可以通过URL的形式来发送,但POST方式发送的数据必须要通过Form才到发送。好,现在让我们用C语言写一个神圣的CGI程序--Hello,World!vihello.c#编辑源文件//Begin#includestdio.hmain(){printf(Content-type:text/html\n\n);printf(H
本文标题:linux下的webserver-BOA及CGIC库的使用指南
链接地址:https://www.777doc.com/doc-6012683 .html