minihttp安装配置ssl和c语言实现cgi
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
评论暂时关闭