windows apache+cgi 运行c/c++

     apache是运用比较广泛的web服务器,大多数是php应用,apache可以启动单独的c/c++进程,为web提供服务,这大大丰富的web内容,当然cgi这种方式不适用于大规模并发的场景. Ngix 据说比apache性能更高,可以考虑

 

1. apache安装

    windows下直接下载二进制安装文件,下一步即可; Linux下直接下载源码安装

 

2. 配置

   $APACHE/conf/httpd.conf

   1. 将 LoadModule cgi_module modules/mod_cgi.so 前注释取消

   2. cgi的执行权限

   <Directory "D:/Apache2.2/cgi-bin">

    AllowOverride None

    Options Indexes ExecCGI   # 添加ExecCGI,允许执行cgi程序

    Order allow,deny

    Allow from all

  </Directory>

   3. 添加文件映射

   AddHandler cgi-script .cgi .pl .py 

  

   注: *.html文件默认放在$APACHE/htdocs下,cgi处理程序放在$APACHE_HOME/cgi/bin下; 修改配置文件后,apache服务需要重启; 部署cgi程序,直接拷贝至/cgi-bin,无需重启服务

 

3. 测试运行

   3.1  安装成功后,直接运行键入http://localhost,会在浏览器在显示 It works! , 实际上执行的是 $APACHE/htdocs/index.html

   3.2  运行python脚本

#!D:\Python27\python.exe
#coding=UTF-8

print "Content-type: text/html;charset=utf-8"
print ""
print "<html><head></head><body>"
print "<h2>Hello World | 显示中文</h2>"
print "</body></html>"

'''
print "Content-type: text/plain\r\n"
print "hello World"
'''

 

   run python

    3.3 执行c/c++程序

    

/**
 *@brief 以文本方式在网页上输出系统信息
 */
int main(int argc,char **argv)
{
	// fprintf(stdout,"content-type:text/plain\r\n\r\n");
        // 注意,此处必须添加两个\r\n,不然500错误,输出页面一定要指定 Content-type, 否则500错误; 常用的 text/plain,text/html,application/json ...
	printf("content-type:text/plain\r\n\r\n"); 
	char *pszMethod;
	pszMethod =getenv("REQUEST_METHOD");

	if(strcmp(pszMethod,"GET") == 0)  // get
	{     
		// 读取环境变量来获取数据
		printf("This is GETMETHOD!\n");
		printf("SERVER_NAME:%s\n",getenv("SERVER_NAME"));
		printf("REMOTE_ADDR:%s\n",getenv("REMOTE_ADDR"));
		fprintf(stdout,"input data is:%s\n",getenv("QUERY_STRING"));
	}
	else  // post
	{  
		// 读取STDIN来获取数据
		int iLength=atoi(getenv("CONTENT_LENGTH"));
		printf("This is POSTMETHOD!\n");
		
		fprintf(stdout,"input data is:\n");
		for(int i=0;i<iLength;i++)
		{
			char cGet=fgetc(stdin);
			fputc(cGet,stdout);
		}
	}
	
	return 0;
}

    

    windows apache+cgi 运行c/c++

     将代码编译成以*.cgi命名(不重命名也没影响)的二进制文件拷贝至/cgi-bin目录即可在浏览器中访问. SERVER_NAME,REMOTE_ADDR等都是系统环境变量,是web服务器传递数据给cgi程序的有效手段,详见 http://www.cfanz.cn/?c=article&a=read&id=39576

 

   3.4 错误列表

   搭建环境不是一帆风顺的,总是会出现一些错误,页面上经常会显示:  500 Internal Server Error ,别急,可通过 $APACHE/logs/error.log 分析错误

   * /cgi-bin/hello.py is not executable; ensure interpreted scripts have "#!" or "'!" first line

   上述错误描述比较详细,python脚本必须在第一行定义解释器的目录,以#!开头

   * [error] [client 127.0.0.1] Premature end of script headers: cgi_test.cgi

   这个错误比较常见,看描述相当于啥也没说,其实就是cgi程序没有正常运行起来,大致有如下原因:   

   (1) 配置没有打开, AddHandler cgi-script .cgi 

   (2) Linux 下 cgi_test 没有执行权限

   (3) 程序无法运行,或缺少依赖库,依赖库放于PATH目录或/cgi-bin下

   (4) 程序运行异常,中途退出,未正常返回. 一般都是该原因引起的 

   (5) 文档类型定义错误,必须是 Content-type: xxx\r\n\r\n,两个\r\n,少一个则报错

 

你可能感兴趣的:(apache,premature,server,error,cgi,500,end,script,headers,of,internal)