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


//参考了大牛们的方法,结合自己的环境做了修改,主要是讲:minihttp安装配置ssl和c语言实现cgi接收字符串并且保存
//先说明环境,我用的是centos6.5 ,前面因需要已经安装过openssl和openssl-devel了,这里没有做openssl安装的说明。
//所需安装包,mini_httpd-1.19.tar.gz ,
minihttp的安装和c语言实现cgi,接收字符串并且保存
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_getline
2. make
3. make install
4. 建立存放网页和cgi的目录:
  mkdir /root/mini/


  mkdir /root/mini/wwwroot


  mkdir /root/mini/wwwroot/cgi-bin
5.  创建一个配置文件
 touch /root/mini/mini_httpd.pid
    touch /root/mini/wwwroot/mini_httpd.log
 
 vim 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.log
6.  把网页放在wwwroot目录下;
 touch mini/wwwroot/index.html
 echo mymini_httpd > index.html
7.  启动mini_httpd: 
 /usr/local/sbin/mini_httpd -C /etc/mini_httpd.conf
8.  在客户端浏览器中访问mini_httpd服务器,在浏览器地址栏中输入
  ip地址:8080


1.配置ssl
    编辑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 -nodes
  
2. make
 make install
 如果出错,再次编译需要 make clean
3. 生成ssl证书
    make cert
 cp ./mini_httpd.pem /etc/
4. 修改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
5.  安装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");
 #endif
   return 0;
 }


 修改Makefile,做修改前记得备份
 cp Makefile Makefilebak
 vim Makefile
 命令行模式下,替换cgictest:
 :%s/cgictest/test/g
 
 ps -ef | grep mini_httpd
 kill -9 进程号

参考:http://joyquitelarge.blog.163.com/blog/static/179062171201241165644255/
        http://www.cnblogs.com/liuyangriver/archive/2012/10/31/2748576.html
        http://deepfuture.iteye.com/blog/1435339
 
 

相关内容