Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15498334
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类:

2010-03-08 16:39:30

浅析ubuntu 9.10下apache2和cgi的配置使用实例

默认访问/cgi-bin/时被重定向到/usr/lib/cgi-bin/,所以我们可以直接使用


luther@gliethttp:~$ sudo vim /etc/apache2/sites-available/default

此文件包含了cgi默认路径
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    


我们可以修改为我们自己期望的cgi默认路径
    ScriptAlias /cgi-bin/ /var/www/cgi-bin/
    
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    


luther@gliethttp:~$ sudo vim /etc/apache2/mods-enabled/mime.conf
# 追加如下一行,表示cgi允许执行的后缀名
AddHandler cgi-script .cgi .pl

luther@gliethttp:/var/www$ sudo mkdir cgi-bin
luther@gliethttp:/var/www/cgi-bin$ sudo vim first.pl
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.[pl]";
luther@gliethttp:/var/www/cgi-bin$ sudo chmod +x first.pl
luther@gliethttp:~$ firefox 127.0.0.1/cgi-bin/first.pl

当然只要保证第1行输出的是"Content-type: text/html\n\n",使用什么语言都可以,
比如:
luther@gliethttp:/var/www/cgi-bin$ sudo vim first.sh
#!/bin/sh
echo "Content-type: text/html\n\n"
echo "Hello, World.[sh]"
tree /home/luther/genshi/ | sed "s/$/
/"
ps aux | sed -e "s/$/
/"

luther@gliethttp:/var/www/cgi-bin$ sudo chmod +x first.sh
luther@gliethttp:~$ firefox 127.0.0.1/cgi-bin/first.sh

或者使用如下方法从firefox地址中加入传递的参数,然后first.sh中接触参数们,回显给firefox
luther@gliethttp:/var/www/cgi-bin$ sudo vim first.sh
#!/bin/sh
echo "Content-type: text/html\n\n"
num=0
for argc in $*; do
    echo $num : $argc"
"
    num=`expr $num + 1`
done
luther@gliethttp:~$
或者将+号替换为空格作为参数间隔
luther@gliethttp:~$ b c d e f 0 1 2 3 4 5
网页浏览器中将出现如下一行返回数据
0 : a
1 : b
2 : c
3 : d
4 : e
5 : f
6 : 0
7 : 1
8 : 2
9 : 3
10 : 4
11 : 5
也或者直接通过www地址栏中的地址,通过参数形式,执行www服务器端的实现系统命令的cgi程序,这样www中输入什么命令都可以被执行了,比如下面返回ps -aux执行结果
cgi代码如下:
#!/bin/sh
echo "Content-type: text/html\n\n"
num=0
for argc in $*; do
    cmd=`echo "$argc" | sed 's/\\\/ /g'`
    echo $num : $cmd"
"
    $cmd | sed -e "s/$/
/"
    num=`expr $num + 1`
done
luther@gliethttp:~$ \-aux
0 : ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2636 1352 ? Ss Mar13 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S< Mar13 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S< Mar13 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S< Mar13 0:02 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< Mar13 0:00 [watchdog/0]
root 6 0.0 0.0 0 0 ? S< Mar13 0:00 [migration/1]
root 7 0.0 0.0 0 0 ? S< Mar13 0:03 [ksoftirqd/1]
root 8 0.0 0.0 0 0 ? S< Mar13 0:00 [watchdog/1]
root 9 0.0 0.0 0 0 ? S< Mar13 0:00 [events/0]
root 10 0.0 0.0 0 0 ? S< Mar13 0:00 [events/1]
root 11 0.0 0.0 0 0 ? S< Mar13 0:00 [cpuset]
root 12 0.0 0.0 0 0 ? S< Mar13 0:00 [khelper]
root 13 0.0 0.0 0 0 ? S< Mar13 0:00 [netns]
......

好了,本地机器上的应用程序可以正常被http网页通过cgi接口直接执行了[luther.gliethttp]


阅读(2798) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

ememepc2015-06-11 23:19:57

为什么我的  显示源代码~~

ememepc2015-06-11 22:33:12

请问  难道  first.pl 在网页中显示的是  源代码?