一个纯bashell的http server

其是这个脚本早就写出来了,已经用了一年。现在怕回头自己都忘记了,把它总结一下。

这个http server非常强大,可以说支持任何脚本语言,什么php,python,java,只要能在Linux shell里面调用的都可以。下面是实现方式。

首先是一个接受request和处理请求并返回给客户端的脚本:

#!/bin/bash
base=/data
read request

while /bin/true; do
read header
[ “$header” == $’\r’ ] && break;
done

url=”${request#GET }”
url=”${url% HTTP/*}”
query=”${url#*\?}”
url=”${url%%\?*}”

if [ $url == “/” ]; then
url=”/index.html”
fi

filename=”$base$url”

if [ “$query” != “$url” -a -x “$filename” ]; then
echo -e “HTTP/1.1 200 OK\r”
echo -e “Content-Type: bin\r”
echo -e “\r”
export QUERY_STRING=$query
“$filename”
echo -e “\r”
elif [ -f “$filename” ]; then
echo -e “HTTP/1.1 200 OK\r”
echo -e “Content-Type: `/usr/bin/file -bi \”$filename\”`\r”
echo -e “\r”
cat “$filename”
echo -e “\r”
else
echo -e “HTTP/1.1 404 Not Found\r”
echo -e “Content-Type: text/html\r”
echo -e “\r”
echo -e “404 Not Found\r”
echo -e “Not Found
The requested resource was not found\r”
echo -e “\r”
fi

相信含义不解释了,非常非常简单,相信是一目了然了。

接下来定义所有指向80端口的请求都交由这个脚本来处理,需要在/etc/xinetd.d目录中建立一个名为http的文件:

# default: off
# description: The http service can response any\
# request come from 80 port and response to client
service http
{
disable = no
port = 80
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/local/bin/zqweb.sh
}

仅此而已。

Tags: , ,

One Comment

Leave a Reply

XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>