zoukankan      html  css  js  c++  java
  • minihttp安装配置ssl和c语言实现cgi

    概述:参考了大牛们的方法,结合自己的环境做了修改,主要是讲:minihttp安装配置ssl和c语言实现cgi接收字符串并且保存
    系统环境:centos6.5 开发版

    依赖软件包:

    mini_httpd-1.19.tar.gz  
    
    cgic206.tar.gz
    
    openssl
    
    openssl-devel

    说明:前面因需要已经安装过openssl和openssl-devel了,这里没有做openssl的安装说明。

    1.   安装mini_httpd:

    tar zxf mini_httpd-1.19.tar.gz 
    
    cd mini_httpd-1.19
    
    //我在安装的时候这里不修改会报错误,说是原来的getline和系统的函数有冲突
    
    vim htpasswd.c +52    修改函数名称 getline, 改为 my_getline
    
    vim htpasswd.c
    +192 修改函数名称 getline, 改为 my_getline
    make make install

    2.   建立存放网页和cgi的目录:

    mkdir /root/mini/
    
    mkdir /root/mini/wwwroot
    
    mkdir /root/mini/wwwroot/cgi-bin

    3.  创建配置文件

    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.log

    4.  把网页放在wwwroot目录下

    touch /root/mini/wwwroot/index.html
    echo mymini_httpd > /root/mini/wwwroot/index.html

    5.  启动mini_httpd

    /usr/local/sbin/mini_httpd -C /root/mini/mini_httpd.conf


    6.  测试是否成功,在客户端浏览器中访问mini_httpd服务器,在浏览器地址栏中输入:

    //ip地址:8080
    例如:192.168.1.120: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 -nodes

     

    2.编译安装mini_httpd源码

    make
    make install
    //如果出错,再次编译需要 make clean

    3. 生成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.conf

    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> "); fprintf(cgiOut, "<TITLE>My CGIC</TITLE></HEAD> "); fprintf(cgiOut, "<BODY>"); fprintf(cgiOut, "<H1>%s</H1>",cgiQueryString); fprintf(cgiOut, "</BODY> "); fprintf(cgiOut, "</HTML> "); #endif return 0; }

     修改Makefile,做修改前记得备份

    cp Makefile Makefilebak
    vim Makefile
    //vim命令行模式下,替换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.cnblogs.com/liuyangriver/archive/2012/10/31/2748576.html
            http://deepfuture.iteye.com/blog/1435339
     
     

  • 相关阅读:
    关于host,nslookup,dig 的安装
    本机网络连接虚拟机
    centos7 安装显卡驱动方法
    #2002 无法登录 MySQL 服务器
    DWM1000 定位操作流程--[蓝点无限]
    DWM1000 三基站一标签定位HEX
    DWM1000 巧用Status 快速Debug
    DWM1000 多个基站定位讨论 --[蓝点无限]
    DWM1000 收发RXLED TXLED控制代码修改
    DWM1000 多个标签定位讨论 --[蓝点无限]
  • 原文地址:https://www.cnblogs.com/etangyushan/p/3679417.html
Copyright © 2011-2022 走看看