Flask+uWSGI+Nginx+Ubuntu部署教程(2)

Flask 依赖的 Werkzeug 就是一个 WSGI 工具包,官方文档的定义是 Werkzeug 是为 Python 设计的 HTTP和 WSGI 实用程序库。我们需要注意的是,Flask 自带的 Werkzeug 是用来开发的,并不能用于生产环境,Flask 是 Web 框架,而 Werkzeug 不是 Web框架,不是 Web 服务器,它只是一个 WSGI 工具包,它在 Flask 的作用是作为 Web 框架的底层库,它方便了我们的开发。

我们将 uwsgi 和 uWSGI 放在一起讲解。uWSGI 是一个 Web 服务器程序,WSGI,上面已经谈到,是一种协议,uwsgi 也是一种协议,uWSGI 实现了 uwsgi、WSGI、http 等协议。 uwsgi 的介绍可以看这里,uwsgi 是 uWSGI 使用的一个自有的协议,它用4个字节来定义传输数据类型描述。尽管都是协议,uwsgi 和 WSGI 并没有联系,我们需要区分这两个词。

Nginx

Nginx 是高效的 Web 服务器和反向代理服务器,可以用作负载均衡(当有 n 个用户访问服务器时,可以实现分流,分担服务器的压力),与 Apache 相比,Nginx 支持高并发,可以支持百万级的 TCP 连接,十万级别的并发连接,部署简单,内存消耗少,成本低,但 Nginx 的模块没有 Apache 丰富。Nginx 支持 uWSGI 的 uwsgi 协议,因此我们可以将 Nginx 与 uWSGI 结合起来,Nginx 通过 uwsgi_pass 将动态内容交给 uWSGI 处理。

官方文档在

最好的 Nginx 教程在

uWSGI 和 Nginx 的关系

从上面的讲解中,我们知道,uWSGI 可以起到 Web 服务器的作用,那么为什么有了 uWSGI 还需要 Nginx 呢?

最普遍的说法是 Nginx 对于处理静态文件更有优势,性能更好。其实如果是小网站,没有静态文件需要处理,只用 uWSGI 也是可以的,但加上 Nginx 这一层,优势可以很具体:

对于运维来说比较方便,如果服务器被某个 IP 攻击,在 Nginx 配置文件黑名单中添加这个 IP 即可,如果只用 uWSGI,那么就需要在代码中修改了。另一方面,Nginx 是身经百战的 Web 服务器了,在表现上 uWSGI 显得更专业,比如说 uWSGI 在早期版本里是不支持 https 的,可以说 Nginx 更安全。

Nginx 的特点是能够做负载均衡和 HTTP 缓存,如果不止一台服务器,Nginx 基本就是必选项了,通过 Nginx,将资源可以分配给不同的服务器节点,只有一台服务器,也能很好地提高性能,因为 Nginx 可以通过 headers 的Expires or E-Tag,gzip 压缩等方式很好地处理静态资源,毕竟是 C 语言写的,调用的是 native 的函数,针对 I/O做了优化,对于动态资源来说,Nginx 还可以实现缓存的功能,配合 CDN 优化(这是 uWSGI 做不到的)。Nginx 支持epoll/kqueue 等高效网络库,能够很好地处理高并发短连接请求,性能比 uWSGI 不知道高到哪里去了。

如果服务器主机上运行了PHP,Python 等语言写的多个应用,都需要监听80端口,这时候 Nginx 就是必选项了。因为我们需要一个转发的服务。

所以说,Nginx 基本也是必选项。

部署准备工作

这里我假设我们拿到的是一台全新的服务器。 一般来说,Linux 系统都会预装 Python 的,但不一定装了 easy_install 工具,我们可以通过 apt-get install python-setuptools 来安装 easy_install,再通过 easy_install 安装 pip。

搞定 Python 环境 $ sudo apt-get install python-setuptools $ sudo easy_install pip

我们也可以直接装 pip:

$ sudo apt-get install python-pip

这样,我们就可以通过 pip 安装 virtualenv,为 flask 项目构建虚拟环境。

$ sudo pip install virtualenv Nginx $ sudo apt-get install nginx

启动 nginx 的方法:

$ sudo /etc/init.d/nginx start

这时候在浏览器地址栏输入服务器的 ip 地址,看到下面的页面就表明 Nginx 已经启动了:

etc_init_d_nginx_start

安装 uWSGI

在安装 uWSGI 前,需要解决 uWSGI 的依赖问题,因为 uWSGI 是一个 C 语言写的应用,所以我们需要 C 编译器,以及 python 开发相关组件:

$ sudo apt-get install build-essential python-dev $ sudo pip install uwsgi

到这,我们就安装好��� uWSGI,

开干

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/03d6ad9266a30453a02ac505423d891c.html