现在的位置: 首页 > 综合 > 正文

lighttpd下pylons的scgi发布

2013年05月29日 ⁄ 综合 ⁄ 共 1258字 ⁄ 字号 评论关闭

lighttpd下pylons的scgi发布

SCGI协议是CGI协议的替代者,是一种应用程序和HTTP服务器之间通讯接口的标准,类似于FastCGI协议,但更容易实现。

pylons构建于paste之上,可以使用pastedeploy启动一个WSGI服务来运行pylons应用程序,在后台通过flup以FastCGI、SCGI、AJP等方式和http服务器(apache或lighttpd)相通讯。
apache和lighttpd的windows下的安装包中都提供了fastcgi模块,不过按照pylons文档中的说明配置后,一运行就出错,根据trackback信息发现,是因为flup中相关代码使用了一些windows下没有提供的socket函数,程序无法执行。
lighttpd另外提供了scgi模块,尝试后发现flup的多线程模式(thread)的scgi服务可以启动,但是多进程模式(forked)不行,原因和fastcgi类似。下面就讲一下lighttpd下pylons的scgi发布配置。

首先,你需要安装flup包。
如果你已安装了setuptools工具包,那就可以运行easy_install -U flup来安装。

然后,修改程序配置文件(就是生成pylons程序后应用程序目录下的那个development.ini文件)中的设置:

...

[server:main]
use = egg:PasteScript#flup_scgi_thread
host = 0.0.0.0
port = 5000

...

use行指定了启动WSGI服务的方式,默认为egg:Paste#http,我们需要启动scgi服务,所以修改为egg:PasteScript#flup_scgi_thread。
在命令行中运行paster serve development.ini,就可以和http服务器进行通讯了。

接着应该设置lighttpd了。打开lighttpd.conf,确定模块列表中有mod_scgi,要注意的是该模块应该在mod_rewrite和mod_access之后,但在mod_accesslog之前,然后再添加如下配置:

scgi.server = ( "/" =>
                ((
                    "host" => "127.0.0.1",
                    "port" => 5000,
                    "check-local" => "disable",
                    "docroot" => "/"
                 ))
              )

一个简单的scgi配置就好了,你可以启动浏览器,键入地址127.0.0.1:5000,是否看到了熟悉的pylons程序默认页面?

apache下没有现成的scgi模块(在网上找到过一个,但似乎不是for 2.X的,apache2.2下一加载就出错),不过可以在Python Cheese Shop上找一个scgi包,里面有apache模块的源程序。原以为在windows下编译会很麻烦,不过试了一下,其实很简单:在VC环境中,创建一个dll工程,把scgi源文件添加进去,然后把apache的头文件目录添加到工程配置中,应该就可以顺利编译了。

抱歉!评论已关闭.