Apache 2.2 + web.py + RoR

刘韧的 1234 文体

1. mod_python 非常不主流,所有 Python 的 Web 框架都内置一个 HTTP Server 的实现(在 Python 世界里这样做太简单了),web.py 还包括了 FastCGI/SCGI 的支持。RoR 也同样通过 mongrel 提供了 web server 支撑。

2. lighttpd 支持反向代理,也支持 FastCGI,再加上它确实够轻,性能也不错,而且用 apache httpd 不够酷,于是它成了新潮 web hacker 们的最爱。

3. 其实我很有理由使用 lighttpd,因为我的内存只有 128M。但我想通过 http 端口来跑 svn,没办法,只有用 apache。编译的时候加上 rewrite/proxy 的支持

./configure --prefix=/usr/local/apache2  --enable-so -enable-ssl \
   --enable-rewrite --enable-proxy --enable-proxy-http

mod_fcgid 的编译过程也很简单,直接 make; make install 就好了。
注意:fcgid 的配置为 SetHandler fcgid-script 而不是 fastcgi-script

4. 我下载的是 web.py 0.2,但网站上的关于如何运行在 Apache FastCGI 模式下的说明是错误的(怀疑说的还是 0.1 版本的方法)。我的方法是增加了这么两行

import os
os.environ['PHP_FCGI_CHILDREN'] = "1"

注意:必须安装 flup 包,web.py 才能支持 FastCGI。

最后的配置为

  1.     <Directory "/usr/local/apache2/htdocs/papp">
  2.         Options ExecCGI
  3.         AllowOverride None
  4.         Order allow,deny
  5.         Allow from all
  6.         <Files code.py>
  7.             SetHandler fcgid-script
  8.         </Files>
  9.         Options +FollowSymLinks
  10.         <IfModule mod_rewrite.c>
  11.             RewriteEngine on
  12.             RewriteBase /papp/
  13.             RewriteCond %{REQUEST_URI} !^/icons
  14.             RewriteCond %{REQUEST_URI} !^/favicon.ico$
  15.             RewriteCond %{REQUEST_URI} !^(/.*)+code.py/
  16.             RewriteRule ^(.*)$ code.py/$1 [PT]
  17.         </IfModule>
  18.     </Directory>

code.py 放在 htdocs 的 papp 目录下

5. RoR 的 mongrel 起在 8000 端口,我在 htdocs 下创建了一个 rapp 目录,然后配置 rewrite

  1.     <Directory "/usr/local/apache2/htdocs/rapp">
  2.         <IfModule mod_rewrite.c>
  3.             RewriteEngine on
  4.             RewriteBase /rapp/
  5.             RewriteRule ^(.*) <a href="http://127.0.0.1:8000/">http://127.0.0.1:8000/</a>$1 [P]
  6.         </IfModule>
  7.     </Directory>

有的网站上的配置是 ProxyPass 什么什么的,我的这个重写到本地端口的配置方法是从 karrigell 那里学来的,觉得也挺好的

Topic: 技术

评论

非常有用。

鉴定完毕。