Linux 下如何配置 webpy + Nginx + Fastcgi?

第一次遇到这个问题的时候webpy官网上并没有提供很好的解决方案,google了很多资料也没有成功地拿来就用,因此sparker5团队自己写了一个链接nginx与webpy的程序,现分享给使用webpy的朋友们。

配置webpy与nginx

使用我们提供的nginx_uwsgi.py文件可以很容易的把nginx和webpy链接起来,具体看下面的步骤:

第一步:下载 nginx_uwsgi.py文件,并与您的webpy主程序放在同一个目录里。  到Github下载

第二步:在您的webpy程序中导入此模块,如:

import nginx_uwsgi

第三步:修改nginx_uwsgi.py文件中的SERVER_PORT为你想要的端口号,并在nginx中把请求转发到此端口(关于Nginx的配置请参考其它文档)。

然后启动你的webpy程序即可,如: python webpy_app.py

另外,nginx_uwsgi.py文件中还有两个可以选配的参数,FOOT_PRINTS_PATH是访问日志文件的路径 名,ERROR_LOG_PATH是错误日志文件的路径名,推荐至少使用ERROR_LOG_PATH(给它一个字符串的文件路径名,比如”/tmp /my-app-errors.log”)。

完整示例

如果拿webpy.org首页上的代码做为示例的话,添加nginx_uwsgi后的代码只比官方演示代码多一行,如:

import web
import nginx_uwsgi
urls = (
    '/(.*)', 'hello'
)
app = web.application(urls, globals())

class hello:
    def GET(self, name):
        if not name:
            name = 'World'
        return 'Hello, ' + name + '!'

if __name__ == "__main__":
    app.run()

 

使用FastCGI

当然,添加了nginx_uwsgi只代表你的webpy请求是经nginx转发的,这在真实的项目中是不实用的,您必须搭配如FastCGi这样的程序同时启动多个进程才行,因此我们在这里教大家如何同时使用FastCGI

第一步:安装FastCGI,详见  http://www.fastcgi.com/drupal/

第二步:修改nginx配置文件使用FastCGI,如以下代码 (把“55555”改为您自己的端口号, 如果提示没有uwsgi_params文件,请安装最新版本的nginx):

location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:55555;
    }

第三步: 重启nginx服务器。

第四步: 打开spawn-fcgi.sh文件(与nginx_uwsg.py文件同时下载的),修改以下配置:

PWD="your webpy path"           #like: /opt/my-site
APPNAME="your webpy app name"   #like: app.py
SERVERPORT="55555"
PROCESSAMOUNT="8"
PIDFILE="/var/run/your-project-name.pid"
其中各个参数的解释如下:
PWD:            你webpy程序的所在目录,最后不要加“/”。
APPNAME:       您webpy主程序的文件名称,比如app.py。
SERVERPORT:    您的webpy程序使用的端口号,与nginx_uwsgi.py中配置的相同。
PROCESSAMOUNT: 启动进程数量,数量越多能够同时处理的请求数就越大,最少为1。
PIDFILE:        保存webpy程序进程ID的文件地址,用于关闭程序。

第五步:给您的webpy程序添加可执行权限,如:

sudo chown -R www-data:www-data path #其中path为您的程序所在目录
chmod +x app.py #其中app.py是您的webpy主程序

第六步:启动FastCGI,如 sudo sh spawn-fcgi.sh start        (杀死进程用: sudo sh spawn-fcgi.sh stop)

本程序已经成功用于我们的第一个外包项目 http://www.dianxinos.com  ,如有bug请反馈到豆瓣小组,谢谢!

Bug反馈地址: http://www.douban.com/group/topic/22641826/

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。