搭建web service是一种灵活解决问题、分解任务的好选择。以服务的形式,以数据为驱动,实现一个庞大系统中的某一部分相对独立功能。
web service其实就是一个忽略view的web server,只要关注好data就行了。而且不需要承担整个网站全部的流量任务,所以做一个轻量级的、能用的即可。lighttpd+webpy正好。
间断地用lighttpd+web.py做web service已经有一年了,但重新再做一个时总要再翻旧代码,有时还会出一些很折腾人的错,干脆把流程记下来,方便以后查看。 以下实验基于:gentoo linux, lighttpd-1.4.20,webpy-0.23,你需要先安装lighttpd和webpy。
hello.py内容如下:
import web
urls = ( '/','Index',
)
class Index:
def GET(self):
print 'hello'
if __name__ =="__main__":
web.run(urls,globals())
在命令行输入python hello.py 9001,在浏览器输入http://your.ip.address:9001,应该可以正常访问。
下面使用lighttpd作前台,通过fastcgi接口来调用hello.py。其实web.py就可以作为一个web server了,之所以再包装一个lighttpd是为了利用它丰富的模块与稳定的性能。毕竟lighttpd是专门做web server的,web.py只是python web server的一个轻量级实现。 lighttpd配置文件lighttpd.conf如下,可根据自己的实际需要来配置,字段名称都能顾名思义。 假设我的hello.py放在/home/wentrue/www
var.basedir = “/home/wentrue/var/www/localhost”
var.logdir = “/home/wentrue/var/log/”
#载入一些要用到的模块
server.modules = (
“mod_access”,
“mod_fastcgi”,
“mod_rewrite”,
“mod_auth”,
“mod_accesslog”,
)
server.document-root = “/home/wentrue/www”
server.pid-file = “/home/wentrue/var/run/lighttpd.pid”
server.errorlog = var.logdir + “/lighttpd-error.log”
server.port = 9001
accesslog.filename = var.logdir + “/lighttpd-access.log”
#fastcgi模块设置
fastcgi.server = ( “/hello.py” =>
( (
“socket”=>”/tmp/fastcgi-wen.socket”,
“bin-path”=>”/home/wentrue/www/hello.py”,
“max-procs”=>2, #python子进程个数
“check-local”=>”disable”, )))
#rewrite模块设置
url.rewrite-once = (
“^/(.*)$” => “/hello.py/$1″, #把所有请求重定向到hello.py
)
#用户登录模块设置
auth.backend = “htdigest”
auth.backend.htdigest.userfile = server.document-root + “/htdigest.user”
auth.require = (“/” => (
“method” => “digest”,
“realm” => “GreenDam”,
“require” => “valid-user”
) )
需要确保自己对log目录及pid文件有写的权限。
配置访问用户名与密码,例如你要设置: user: GreenDam password: damnit 利用如下代码建立一个code.sh脚本:
#!/bin/sh
user=$1
realm=$2
pass=$3
hash=`echo -n “$user:$realm:$pass” | md5sum | cut -b -32`
echo “$user:$realm:$hash”
在终端运行:sh code.sh GreenDam GreenDam damnit,得到如下字符:
GreenDam:GreenDam:ffc6bb3964cd62df5e5458924798e142
存放到server.document-root下一个名为htdigest.user的文件中,注意在lighttpd.conf中也要相应地设 置”realm” => “GreenDam”。
需要万分注意的是,python入口文件hello.py的权限需要设置为调用者可执行,否则fastcgi服务无法启动,即如下命令:
chmod 777 hello.py
最后lighttpd -f lighttpd.conf,服务就启动了。
(责任编辑:IT) |