mini_httpd是常用的嵌入web服务器,可以支持http,https。我就是因为需要支持https,所以进行了移植。
首先在mini_httpd-1.19目录下查看README,但是没有编译的流程说明,不按套路出牌,有makefile,那就直接make吧。
make
编译可能报错getline啥的....
解决办法:
修改htpasswd.c,因为getline与标准库的getline重名,将 getline 改为 lgetline 即可。
mkdir www
mkdir /www/cgi-bin/http.cgi
配置文件内容大致如下:
#使用的端口
port=8080
#用户的使用权限
user=root
#存放网页的目录
dir=/www
#存放cgi的目录
cgipat=cgi-bin/http.cgi
pidfile=/var/mini_httpd.pid
#存放log的文件
logfile=/tmp/mini_httpd.log
#设置的格式
charset=UTF-8
#支持ssl
ssl
#存放ssl证书的目录
certfile=/etc/mini_httpd.pem
增加支持ssl是为了支持https,如果是使用http就不需要。
端口配置缺省http默认使用的80,https默认使用的443
在mini_httpd-1.19目录下
修改makefile
去掉17-20行的注释
SSL_TREE= $(TOPDIR)/apps/openssl-1.0.1e/openssl-install
SSL_DEFS= -DUSE_SSL
SSL_INC= -I${SSL_TREE}/include
SSL_LIBS= -L${SSL_TREE}/lib -lssl -lcrypto
同时还需要修改使用证书的时间
在77行左右将天数365改为3650
opensslreq -new -x509 -days 3650 -nodes -config mini_httpd.cnf -outmini_httpd.pem -keyout mini_httpd.pem
生成证书:
make cert
即可生成mini_httpd.pem
mini_httpd -C /etc/mini_httpd.conf
bind:Addiessalready in use
startedas root without requesting chroot(), warningonly
上面警告,但是mini_httpd已经启动不用理会(具体警告原因,博主也没有找出原因,有知道原因的还请告知)
启用后如果在网页上能正常打开https://localhost:8080
那就恭喜你OK了!
在使用mini_httpd作为服务器测试发现http.cgi调用不了一些应用程序,然后查看源代码发现默认给出的bin路径和lib库路径没有完全包括使用的系统,需要修改mini_httpd.c里面的
#defineCGI_PATH "/usr/local/bin:/usr/ucb:/bin:/usr/bin"
#endif/* CGI_PATH */
#ifndefCGI_LD_LIBRARY_PATH
#defineCGI_LD_LIBRARY_PATH "/usr/local/lib:/usr/lib"
改为:
#ifndefCGI_PATH
#defineCGI_PATH "/usr/local/bin:/usr/ucb:/bin:/usr/bin:/usr/sbin:/sbin"
#endif/* CGI_PATH */
#ifndefCGI_LD_LIBRARY_PATH
#defineCGI_LD_LIBRARY_PATH "/usr/local/lib:/usr/lib:/lib"
修改后即可工作正常。
以上都是在嵌入式的交叉编译环境下调试,参考了不少其它博主的文章,也希望这篇博文可以带给一些人帮助。这也是2017年我的第一篇博文,希望从此开始,每周一篇,记录点点滴滴。也望读者多多点赞,评论。