apache CGI程序的简单配置与使用
添加虚拟主机
<virtualhost 127.0.0.1:50001>
</virtualhost>
</virtualhost>
这里新添加了50001端口来进行监听,所以还需要添加监听端口号
Listen 50001要让程序能正常运行,还得通过配置ScriptAlias来允许服务器在指定的情况下,以CGI方式运行。
<virtualhost 127.0.0.1:50001>
ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/
</virtualhost>
ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/
</virtualhost>
所以上述的配置会告诉apache,所以以/cgi-bin/开头的资源都会被映射到/usr/local/apache/cgi-bin/目录下,并被认为是cgi程序。然后重启服务器
在apache/cgi-bin/目录里有一些测试例子,我们可能用它来测试下,看看配置是否能正常运行。
比如说apache/cgi-bin/目录下有个test-cgi程序,源码如下:
#!/bin/sh
# This article come from linxuany.com
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
# This article come from linxuany.com
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 =
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程序。
现在我们用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;
- }
实现功能为:打印打印a+b的值,如果有get参数,同时打印get参数
编译
www@linuxany.com:/usr/local/apache/cgi-bin$ gcc test.c -o test
这时我们可以通过
http://127.0.0.1:50001/test
如果通过
http://127.0.0.1:50001/test?name=linuxany
我们的程序就会打印name=linuxany这个查询参数。
没有评论▼