uWSGI

uWSGI是一架设在诸如 nginx, lighttpd, 还有 cherokee 等服务器上的部署方式,请查阅 FastCGI其他服务器 获取关于上述方式的详细内容。在将你的WSGI应用架设到上述服务器上之前,你还需要一个uWSGI服务器。uWSGI是一个应用服务器,同时也是一个协议服务器;它能够搭载uWSGI, FastCGI, 和 HTTP协议。

目前最流行的uWSGI服务器是 uwsgi ,我们将在本向导里使用它。请确认将其安装在环境内。

注意

请事先确认你应用程序内的所有 app.run() 调用包含在 if __name__ ==  '__main__': 区块内或在一个单独的文件里。 要确认这个的原因是因为这句语句执行后总是会启动一个新的本地WSGI服务器,但在部署到uWSGI的环境中,我们不需要它。

用uwsgi执行你的应用

uwsgi 被设计于在python模块里找到WSGI调用时进行相关操作。

假设在myapp.py里已有一个flask的应用,只要执行如下的命令:

$ uwsgi -s /tmp/uwsgi.sock --module myapp --callable app

或者,你也可以这样:

$ uwsgi -s /tmp/uwsgi.sock myapp:app

配置 nginx

基本的基于nginx的flask uWSGI配置如下:

location = /yourapplication { rewrite ^ /yourapplication/; }
location /yourapplication { try_files $uri @yourapplication; }
location @yourapplication {
  include uwsgi_params;
  uwsgi_param SCRIPT_NAME /yourapplication;
  uwsgi_modifier1 30;
  uwsgi_pass unix:/tmp/uwsgi.sock;
}

上述配置将要发布的应用绑定到了 /yourapplication 路径下。如果你希望将应用配置在根目录执行,这非常方便,因为你只要不要去指定 SCRIPT_NAME 和设置uwsgi modifier就可以了:

location / { try_files $uri @yourapplication; }
location @yourapplication {
    include uwsgi_params;
    uwsgi_pass unix:/tmp/uwsgi.sock;
}