窝牛号

Python+Flask+Tornado+Nginx服务器部署解决方案

Python+Tornado+Nginx服务器部署解决方案

上期文章,我们分享了flask的简单入门,哪里我们的代码都是运行在本机上面。flask作为一个web服务器,最后当然要部署在云服务器上

flask云服务器配置

* Serving Flask app &34; (lazy loading) * Environment: production WARNING: Do not use the development server in a production environment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

这是上期文章中,flask提示的问题

WARNING: Do not use the development server in a production environment.这句话的意思是flask不要使用在生产环境中,由于flask是一个简单的web框架,flask 在正式的服务器上的表现能力确实不足,当然你的网站访问量不是很多的时候,完全可以使用flask来进行服务,我们来使用Tornado来部署服务器环境来代替flask的WSGI ,下图是网友整理的一个服务器相应一个浏览器处理的过程,主要是 如下:

1、浏览器输入网站进行网页请求

2、服务器端的Nginx 反向代理来监听网络的请求接口(一般是80(http)或者443端口(https))

3、nginx解析到服务器上的WSGI 服务

4、WSGI 服务托管flask web服务器的程序

5、flask web 服务器原路返回网页与数据

服务器处理流程

Tornado

Tornado是一个开源的网络服务器框架,它是基于社交聚合网站FriendFeed的实时信息服务开发而来的,Tornado使FriendFeed使用的可扩展的非阻塞Web服务器及其相关工具的开源版本,这个Web框架看起来有些像web.py或 Google的webapp,不过为了更加有效地利用非阻塞服务器环境,Tornado这个Web框架还包含了一些相关的有用工具和优化。

Tornado与现代主流的Web服务器框架有着明显的区别:它是非阻塞式的服务器,速度相当快。这得益于其非阻塞的方式和对epoll的运用。Tornado每秒可以处理数以千计的连接,对于实时Web服务来说Tornado确实是一个理想的Web框架

轻量级Web框架

异步非阻塞IO处理方式

Tornado采用的单进程单线程异步IO的网络模式,其高性能源于Tornado基于Linux的Epoll(UNIX为kqueue)的异步网络IO。

出色的抗负载能力

不依赖多进程或多线程

WSGI全栈替代产品

WSGI把应用(Application)和服务器(Server)结合起来,Tornado既可以是WSGI应用也可以是WSGI服务。

既是WebServer也是WebFramework

我们使用Tornado作为flask的WSGI服务来托管flask的网页,这样我们就可以部署大访问量的生产服务环境

参考上期的文章,我们新建一个web.py的flask web 代码

from flask import Flask, request from flask import render_template app = Flask(__name__) @app.route(&39;) def index(): return render_template(&39;) @app.route(&39;) def powers(): return &39; if __name__ == &39;: app.run()

在flask web.py 文件夹下,新建一个tornadoweb.py文件,里面配置Tornado

当然,在配置以前你需要在服务器上安装tornado,直接使用pip install 安装即可

from tornado.wsgi import WSGIContainer from tornado.httpserver import HTTPServer from web import app34;0.0.0.0&监听5000端口,作为服务器这里配置成0.0.0.0,服务器就可以监听所有浏览器的访问了。 s.start(1) IOLoop.instance().start()

以上几句简单的代码便可以使用tornado来托管flask,个人感觉tornado的入门简单,比其它web服务器代理配置简单方便的多。这里需要注意,我们不再运行web.py而是运行tornadoweb.py这个脚本

tornado主要跟本地服务器打交道,而跟浏览器打交道的便是nginx

nginx配置

Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者统一资源定位符(Uniform Resources Locator)URL 作为沟通依据,通过 HTTP 协议提供各种网络服务。

Nginx 使用基于事件驱动架构,使得其可以支持数以百万级别的 TCP 连接。高度的模块化和自由软件许可证使得第三方模块层出不穷(这是个开源的时代啊)。Nginx 是一个跨平台服务器,可以运行在 Linux、Windows、FreeBSD、Solaris、AIX、Mac OS 等操作系统上。这些优秀的设计带来的极大的稳定性。

Nginx 是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器。

Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。

nginx可以提供的服务

web 服务.负载均衡 (反向代理)web cache(web 缓存)

nginx 的优点

高并发。静态小文件占用资源少。2万并发、10个线程,内存消耗几百M。功能种类比较多。web,cache,proxy。每一个功能都不是特别强。支持epoll模型,使得nginx可以支持高并发。nginx 配合动态服务和Apache有区别。(FASTCGI 接口)利用nginx可以对IP限速,可以限制连接数。配置简单,更灵活。

nginx是免安装的,你只需要到官网上下载对应的版本即可,小编的服务器系统是win系统,下载压缩文件到本地服务器上,解压缩,就可以看到nginx.exe文件,双击就可以打开一个nginx服务,在打开服务之前,我们需要配置一下(conf),修改nginx.conf的配置文件

server { listen 80;服务器的IP地址 access_log logs/host.access.log main; location / { proxy_pass http://127.0.0.1:5000;39;s try it

这里是小编的服务器地址,当然你需要注册一个域名,然后让你的域名解析到你的服务器上,就可以输入域名看到我们搭建的网站了

这里推广一下人工智能研究所出品的专栏:人工智能的检测与追踪,感兴趣的小伙伴可以探讨学习

Nginx 的https的配置

以上便是服务器端的完整部署方案,只是我们只监听了80端口,但是https监听的是443端口,我们需要修改一下nginx服務配置监听443端口

server { listen 443 ssl; server_name 39.106.000.00;#服务器的IP地址; ssl_certificate cert.pem; SSL的证书 ssl_certificate_key cert.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { proxy_pass http://127.0.0.1:5000; } }

修改后需要nginx重新reload一下,服务才能生效

在nginx的文件夹中打开cmd命令框,输入nginx -s reload

服务便可以生效

https nginx

代码调试过程中若想关闭nginx ,需要在cmd命令框中输入nginx -s quit

以上配置完成后就可以使用https來进行访问了

nginx中的证书大家可以到域名注册商哪里免费下载ssl的证书

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除

窝牛号 wwww.93ysy.com   沪ICP备2021036305号-1