• Webpy + Nginx with FastCGI搭建Web.py
    • 环境依赖的软件包
    • 一些资源
    • Notes
  • Nginx 配置文件
  • Spawn-fcgi
    • 启动和关闭的命令
  • Hello world!
  • 运行

    Webpy + Nginx with FastCGI搭建Web.py

    这一节讲解的是如何使用Nginx和FastCGI搭建Web.py应用

    环境依赖的软件包

    • Nginx 0.8. or 0.7. (需要包含fastcgi和rewrite模块)。
    • Webpy 0.32
    • Spawn-fcgi 1.6.2
    • Flup注意:Flup是最常见的忘记装的软件,需要安装

    更老的版本应该也可以工作,但是没有测试过,最新的是可以工作的

    一些资源

    • Nginx wiki
    • Spawn-fcgi
    • Flup

    Notes

    • 你可以重命名index.py为任何你想要的文件名。
    • /path/to/www 为代码路径。
    • /path/to/www/index.py为python代码的完整路径。

    Nginx 配置文件

    1. location / {
    2. include fastcgi_params;
    3. fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; # [1]
    4. fastcgi_param PATH_INFO $fastcgi_script_name; # [2]
    5. fastcgi_pass 127.0.0.1:9002;
    6. }

    对于静态文件可以添加如下配置:

    1. location /static/ {
    2. if (-f $request_filename) {
    3. rewrite ^/static/(.*)$ /static/$1 break;
    4. }
    5. }

    注意: 地址和端口号可能会是不同的。

    Spawn-fcgi

    可以通过一下命令启动一个Spawn-fcgi进程:

    1. spawn-fcgi -d /path/to/www -f /path/to/www/index.py -a 127.0.0.1 -p 9002

    启动和关闭的命令

    启动:

    1. #!/bin/sh
    2. spawn-fcgi -d /path/to/www -f /path/to/www/index.py -a 127.0.0.1 -p 9002

    关闭:

    1. #!/bin/sh
    2. kill `pgrep -f "python /path/to/www/index.py"`

    Note: 你可以随意填写地址和端口信息,但是一定需要和Nginx配置文件相匹配。

    Hello world!

    讲下面的代码保存为index.py(或者任何你喜欢的),注意,使用Nginx配置的话,web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)这一行代码是必须的。

    1. #!/usr/bin/env python
    2. # -*- coding: utf-8 -*-
    3. import web
    4. urls = ("/.*", "hello")
    5. app = web.application(urls, globals())
    6. class hello:
    7. def GET(self):
    8. return 'Hello, world!'
    9. if __name__ == "__main__":
    10. web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)
    11. app.run()

    注意: 同样需要给代码设置权限,代码如下chmod +x index.py。

    运行

    • 打开一个 spawn-fcgi 进程.
    • 打开 Nginx.如果需要检查应用程序是否运行,使用ps aux|grep index.py可以很容易的查看。

    重启nginx配置:

    1. /path/to/nginx/sbin/nginx -s reload

    停止nginx:

    1. /path/to/nginx/sbin/nginx -s stop

    注意:运行后可访问http://localhost访问网站,更多信息可以去参考nginx官方文档。