浅析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) |