一直都认为使用scgi一定要安装quixote网站提供的scgi的包,因为很多地方都是说easy_install scgi,因为这个安装就是要去下载scgi-1.10.tar.gz包。今天经hgf的提醒,是不是一定要scgi这个包呢?我带着疑问去看了一下flup的源代码,发现确实没有调用scgi_server的模块,而是自己实现了scgi的接口,当然使用的是python代码,而不像http://www.mems-exchange.org/software/scgi/那样有.c的代码。确实这一块可能就是性能的体现,不过想想python的i/o性能也是非常不错的。暂且放在一边。既然它不使用mems-exchange提供的包,那么只要安装mod_scgi.so就可以了。对apache,lighttpd的配置还是不清楚。我就参照了rails社区提供的一些资料,对windows+apache2+scgi 进行了配置。

1)先到http://www.zedshaw.com/downloads/scgi_rails/,下载apache2的mod_scgi 1.7版的windows binary。然后把mod_scgi.so拷贝到apache中的modules目录下。

2)配置httpd.conf

LoadModule scgi_module modules/mod_scgi.so

<VirtualHost *>
  ServerName foo
  DocumentRoot /www/foo/public
  SCGIMount / 127.0.0.1:5000
  <LocationMatch \..+$>
    # don't handle those with SCGI
    SCGIHandler Off
  </LocationMatch>
  <Directory /www/foo/public/>
    Options ExecCGI FollowSymLinks
    AllowOverride all
    Allow from all
    Order allow,deny
  </Directory>
</VirtualHost>

注意其中DocumentRoot后面的path,我的机子上并没有这个,而是一个虚拟的。(说实在的,我也不清楚),SCGIMount / 127.0.0.1:5000这个很关键,它要与pylons project中development.ini的配置文件相对应。

3)在pylons project,比如helloworld的development.ini中配置:

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

4)启动helloworld,paster serve development.ini,就可以通过apache2使用scgi了。在浏览器中,只需要敲入http://localhost/hello/serverinfo,不用带5000端口号了。输出的结果其中有:

'SERVER_SOFTWARE': 'Apache/2.0.55 (Win32) mod_scgi/1.7',
'DOCUMENT_ROOT': '/www/foo/public',
'PATH_INFO': '/hello/serverinfo', 'SERVER_PROTOCOL': 'HTTP/1.1',