apache cgi程序的简单配置
Posted by 机器人 on 5th 五月 2009 in c/c++, linux/server
首先添加虚拟主机
<virtualhost 127.0.0.1:50001> </virtualhost>
这里新添加了50001端口来进行监听,所以还需要添加监听端口号
Listen 50001要让程序能正常运行,还得通过配置ScriptAlias来允许服务器在指定的情况下,以CGI方式运行。
<virtualhost 127.0.0.1:50001> ScriptAlias /cgi-bin/ /usr/local/ebserver/apache/cgi-bin/ </virtualhost>
所以上述的配置会告诉apache,所以以/cgi-bin/开头的资源都会被映射到/usr/local/webserver/apache/cgi-bin/目录下,并被认为是cgi程序。
然后重启服务器
在apache/cgi-bin/目录里有一些测试例子,我们可能用它来测试下,看看配置是否能正常运行。
比如说apache/cgi-bin/目录下有个test-cgi程序,源码如下:
#!/bin/sh # disable filename globbing set -f echo "Content-type: text/plain; charset=iso-8859-1" echo echo CGI/1.0 test script report: echo echo argc is $#. argv is "$*". echo echo SERVER_SOFTWARE = $SERVER_SOFTWARE echo SERVER_NAME = $SERVER_NAME echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE echo SERVER_PROTOCOL = $SERVER_PROTOCOL echo SERVER_PORT = $SERVER_PORT echo REQUEST_METHOD = $REQUEST_METHOD echo HTTP_ACCEPT = "$HTTP_ACCEPT" echo PATH_INFO = "$PATH_INFO" echo PATH_TRANSLATED = "$PATH_TRANSLATED" echo SCRIPT_NAME = "$SCRIPT_NAME" echo QUERY_STRING = "$QUERY_STRING" echo REMOTE_HOST = $REMOTE_HOST echo REMOTE_ADDR = $REMOTE_ADDR echo REMOTE_USER = $REMOTE_USER echo AUTH_TYPE = $AUTH_TYPE echo CONTENT_TYPE = $CONTENT_TYPE echo CONTENT_LENGTH = $CONTENT_LENGTH
然后在浏览器里输入http://127.0.0.1/cgi-bin/test-cgi
如果设置正确就能显示如下信息
CGI/1.0 test script report: argc is 0. argv is . SERVER_SOFTWARE = Apache/2.2.10 (Unix) PHP/5.2.8 SERVER_NAME = 127.0.0.1 GATEWAY_INTERFACE = CGI/1.1 SERVER_PROTOCOL = HTTP/1.1 SERVER_PORT = 50001 REQUEST_METHOD = GET HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 PATH_INFO = PATH_TRANSLATED = SCRIPT_NAME = /cgi-bin/test-cgi QUERY_STRING = REMOTE_HOST = REMOTE_ADDR = 127.0.0.1 REMOTE_USER = AUTH_TYPE = CONTENT_TYPE = CONTENT_LENGTH =
当然你也可以选择用其它语言来写一个cgi程序,其中apache提供了一个用pear写的例子。
下面是用C语言写的一个简单的例子。
#include <stdlib .h> #include <stdio .h> int main (int argc, char** argv) { char a[] = "-100"; char b[] = "456"; int c; c = atoi(a) + atoi(b); char *p; p = getenv("QUERY_STRING"); printf("Content-type: text/html\n\n"); printf("c=%d",c); printf("%s",p); return 0; } </stdio></stdlib>
实现功能为:打印打印a+b的值,如果有get参数,同时打印get参数
编译
hqlong@ubuntu:/usr/local/webserver/apache/cgi-bin$ gcc test.c -o test
这时我们可以通过http://127.0.0.1:50001/test来访问了。
如果通过http://127.0.0.1:50001/test?name=hqlong
我们的程序就会打印name=hqlong这个查询参数。
参考资料:http://doc.chinahtml.com/Manual/ApacheManual/howto/cgi.html
机器人 2009-05-05 17:52 于 北京