首页 > 学院 > 操作系统 > 正文

minihttp安装配置ssl和c语言实现cgi

2024-06-28 13:26:46
字体:
来源:转载
供稿:网友
minihttp安装配置ssl和c语言实现cgi

//参考了大牛们的方法,结合自己的环境做了修改,主要是讲:minihttp安装配置ssl和c语言实现cgi接收字符串并且保存//先说明环境,我用的是centos6.5 ,前面因需要已经安装过openssl和openssl-devel了,这里没有做openssl的安装说明。

1. 所需安装包tar zxf mini_httpd-1.19.tar.gz cgic206.tar.gz 还有 openssl和openssl-devel的安装包

cd mini_httpd-1.19 //我在安装的时候这里不修改会报错误,说是原来的getline和系统的函数有冲突 vim htpasswd.c +52 getline 改为 my_getline vim htpasswd.c +192 getline 改为 my_getline2. make3. make install4. 建立存放网页和cgi的目录:  mkdir /root/mini/

  mkdir /root/mini/wwwroot

  mkdir /root/mini/wwwroot/cgi-bin5. 创建一个配置文件 touch /root/mini/mini_httpd.pid touch /root/mini/wwwroot/mini_httpd.log vim /root/mini/mini_httpd.conf 添加以下内容 port=8080  dir=/root/mini/wwwroot  cgipat=cgi-bin/*  user=nobody  pidfile=/root/mini/mini_httpd.pid  logfile=/root/mini/wwwroot/mini_httpd.log6. 把网页放在wwwroot目录下; touch /root/mini/wwwroot/index.html echo mymini_httpd >/root/mini/wwwroot/index.html7. 启动mini_httpd: /usr/local/sbin/mini_httpd -C /root/mini/mini_httpd.conf8. 测试是否成功,在客户端浏览器中访问mini_httpd服务器,在浏览器地址栏中输入: ip地址:8080

  显示出 mymini_httpd就是成功了

===============================================================

下面是配置SSL的步骤:1.配置ssl

进入到mini_httpd的目录:

cd mini_httpd-1.19

编辑Makefile 去掉17-20行的注释 SSL_TREE = /usr/local/ssl SSL_DEFS = -DUSE_SSL SSL_INC = -I${SSL_TREE}/include SSL_LIBS = -L${SSL_TREE}/lib -lssl -lcrypto 修改67-69行365改为3650 cert: mini_httpd.pem mini_httpd.pem: mini_httpd.cnf openssl req -new -x509 -days 3650 -nodes2. make make install 如果出错,再次编译需要 make clean3. 生成ssl证书 make cert cp ./mini_httpd.pem /etc/4. 修改mini_httpd.conf配置文件,没有就自己新建一个,下面是我的mini_httpd.conf内容: #mini_httpd configuration file data_dir=/root/mini/wwwroot/ #太关键了,前面没有加,结果就是在程序中写不进去内容。 user=root port=443 host=0.0.0.0 cgipat=cgi-bin/*.cgi logfile=/var/log/mini_httpd pidfile=/var/run/mini_httpd.pid charset=GB2312 ssl certfile=/etc/mini_httpd.pem

启动mini_http

/usr/local/sbin/mini_httpd -C ./mini_httpd.conf5. 安装cgic206.tar.gz tar zxf cgic206.tar.gz cd cgic206 make 生成的是测试的.cgi程序

下面是自己编写一个.cgi程序vim test.c源代码:#include <stdio.h>#include "cgic.h" #include <string.h> #include <stdlib.h> #include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>

extern char *cgiQueryString;

int file_w(char *filename, char *buf){int size, fd; fd = open (filename, O_CREAT | O_RDWR | O_TRUNC, 0664);size = write (fd, buf, strlen(buf));if (size < 0){ return -1; } close (fd);return 0;}

int cgiMain() {int res;res = file_w ("/root/tang.log", cgiQueryString);if (res == -1) { perror ("file_w");} #if 1

  //将要发送的内容回显在网页cgiHeaderContentType("text/html");fPRintf(cgiOut, "<HTML><HEAD>/n");fprintf(cgiOut, "<TITLE>My CGIC</TITLE></HEAD>/n");fprintf(cgiOut, "<BODY>");fprintf(cgiOut, "<H1>%s</H1>",cgiQueryString);fprintf(cgiOut, "</BODY>/n");fprintf(cgiOut, "</HTML>/n");#endifreturn 0;}

修改Makefile,做修改前记得备份cp Makefile Makefilebakvim Makefilevim命令行模式下,替换cgictest::%s/cgictest/test/g

编辑完成后保存退出

 make

产生一个test.cgi的文件,拷贝到/root/mini/wwwroot/cgi-bin/目录下

测试

  在地址栏里面输入:https://ip地址:8080/cgi-bin/test.cgi?测试内容

  回车,记得别忘了test.cgi后面的问号(?),我在测试的时候测试内容前面没有加问号结果测试不出来

  结束minihttpd,退出的时候老是退不干净,需要手动的杀死,还没有找到原因,如果哪位大哥知道了麻烦告诉一声,现在用的这种方法杀死进程的:

  //查询进程号

  ps -ef | grep mini_httpd  kill -9 进程号

参考:http://joyquitelarge.blog.163.com/blog/static/179062171201241165644255/http://www.CUOXin.com/liuyangriver/archive/2012/10/31/2748576.htmlhttp://deepfuture.CUOxin.com/blog/1435339


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表