Nginx+mod_wsgi+webpy

| 2011年4月3日

最近在做一个项目是以结伴开发的模式来作的,最终两个人讨论一两个人都相对熟悉而且开发效率较高的python来开发,在web框架上最终抛弃了较为原始的直接cgi和较为臃肿的django,而选择了介于之间的webpy,webpy在使用了一段时间后发现,我们两个人都很喜欢使用而且用的是相当的顺手,后台环境就使用Nginx+mod_wsgi+webpy,也是非常流畅。现在把这个简单的‘复杂’环境搭建记录一下:

重点参考了nginx的官方文档:http://wiki.nginx.org/NgxWSGIModule的说明安装吧

下载nginx mod_wsgi webpy http://nginx.net/ http://hg.mperillo.ath.cx/nginx/mod_wsgi/ http://webpy.org

nginx下载nginx-0.8.54.tar.gz,太新的版本mod_wsgi还不支持,就这个版本的也还是要打补丁才可以的,补丁文件在: http://www.thechikun.com/depo/patch-mod_wsgi.txt mod_wsgi下载后mod_wsgi-8994b058d2db.tar.gz webpy下载的版本是:webpy-webpy-webpy-0.34-43-gfd2be24.tar.gz这个我下的是最新的版本

根据补丁文件修改后即可进行配置编译,进入nginx目录:

./configure add-module=/path/mod_wsgi-8994b058d2db/ prefix=/usr/local/nginx
这里还需要修改一下目录下'objs/Makefile'文件,取消掉一些编译warning设置,不然编译器会把warning也认为是error来处理
make
sudo make install

安装完niginx后,还要在mod_wsgi-8994b058d2db中去安装一下这个:

python setup.py --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf --sbin-path=/usr/local/nginx/sbin

然后配置nginx配置文件,在nginx.conf的http外面加上

env HOME;
env PYTHON_EGG_CACHE=/tmp; #设置一下pythonegg文件的零时解压目录
http{
....
}

这样就可以设置好python的路径问题. 下面给出一个完整的虚拟主机配置:

server {
listen 80;# 这个端口不要和其它server的端口冲突哦
server_name test.zhwen
index index.html index.py;
root /home/helight/babycode/webpytest;
include wsgi_vars;

location / {
wsgi_pass /home/helight/babycode/webpytest/src/main.py;
#我是使用eclipse来开发的,所以这里把所有的py文件都放到了src下面
wsgi_pass_authorization off;
wsgi_script_reloading on;
wsgi_use_main_interpreter on;
}
#这里把静态文件都放到了‘/home/helight/babycode/webpytest/static/’下,所以也指定了这个目录的访问,这个目录下既可以放图片,jscsshtml等文件了
location /static/ {
expires 12h;
}
}

接下来些/home/helight/babycode/webpytest/src/main.py这个文件,就以官方的demo为例吧

import os
import web

web.config.debug = False

urls = (
'/.*', 'hello',
)

class hello:
def GET(self):
return "Fuck The World..."
app = web.application(urls, globals())

curdir = os.path.dirname(__file__)
session = web.session.Session(app, web.session.DiskStore(os.path.join(curdir+"../",'sessions')),)
#这里是把sessions的位置指向了/home/helight/babycode/webpytest/
application = app.wsgifunc()

这样启动ngnix后就可以http://test.zhwen/ 访问了; 再新建一个目录/home/helight/babycode/webpytest/static/,然后创建一个test.html的文件:

<h1>Fuck the world!!</h1>

以http://test.zhwen/static/test.html 访问 对于要在main.py中引人自己的模块的,还要加入这样的语句

curdir = os.path.dirname(__file__)
sys.path.append(curdir)

即把当前目录加入module的搜索路径,负责会出现无法加载模块的错误。

看完本文有收获?请分享给更多人

关注「黑光技术」,关注大数据+微服务