Nginx+uWSGI部署Python Web应用

   2023-02-10 学习力0
核心提示:web开发的过程中一定会遇到 cgi、wsgi 之类的名词,然后看着他们十分相似的解释估计还没开始写代码就晕了,这都什么鬼? 今天我就聊聊这些容易搞混的名称。CGI(Common Gateway Inteface)  字面的意思就是通用网关接口,它是外部应用程序与Web服务器之间的

web开发的过程中一定会遇到 cgi、wsgi 之类的名词,然后看着他们十分相似的解释估计还没开始写代码就晕了,这都什么鬼? 今天我就聊聊这些容易搞混的名称。

CGI(Common Gateway Inteface)

  字面的意思就是通用网关接口,它是外部应用程序与Web服务器之间的接口标准,规定一个程序该如何与web服务器之间通信。当然,CGI只是一个很基本的协议,在现代常见的服务器结构中基本已经没有了它的身影,更多的是它的扩展和更新

原理篇

  假如我们使用python的Flask框架写了一个网站,现在我们要把它部署到公网上,我们一般需要一下几步:

    1.nginx作为反向代理服务器:负责静态资源的发送(js、css、图片等)、动态请求的转发以及结果的回复。

    2.uWSGI作为后端服务器:负责接收nginx请求转发并处理后发给Flask应用以及接受Flask应用返回信息转发给ngixn。

    3.Flask作为web应用程序:负责接收请求后处理数据并渲染相应的返回页面给uWSGI服务器

  接下来的协议及接口就应用在以上三者之间:

    uwsgi:应用于前端server(nginx)与后端server(uWSGI)的通信中,制定规范等等,让前后端服务可以理解对方在说什么。

    WSGI:它是用在python web框架编写的应用程序与后端服务之间的规范(也就是flask与uWSGI之间),让你的应用程序可以与后端服务器顺利通信。在WSGI出现之前你不得不专门为某个后端服务而写特定的API,并且无法更换后端服务器,而WSGI就是一种统一规范,所有使用WSGI的服务器都可以运行使用WSGI规范的web框架,反之亦然。

    uWSGI: 是一个Web应用服务器(或者说是一个进程),它实现了WSGI协议、uwsgi、http等协议。 用于接收前端服务器转发的动态请求并处理后发给 web 应用程序(这里也就是Flask应用程序)。

    Nginx+uWSGI部署Python Web应用

 

  对于CGI,我认为在 CGI 制定的时候也许没有考虑到现代的架构,所以他只是一个通用的规范, 而后来的 WSGI 也好 Fastcgi 也好等等这些都是在 CGI 的基础上扩展并应用于现代Web Server不同地方的通信规范, 所以我在图中将 CGI 标注在整个流程之上。

  做为一个 Python Web 开发者,我们最关注的是 WSGI 这里所做的事, 了解熟悉这里的规范不仅可以让我们更快速的开发 Web 应用同时我们也可以自己实现一个后端 Server

  最后总结一下这几个名词:

    WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx)与应用服务器(如uWSGI服务器)通信的一种规范。  

    uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

    uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information), 每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

  要注意 WSGI / uwsgi / uWSGI 这三个概念的区分

    WSGI是一种通信协议。uwsgi同WSGI一样是一种通信协议。而uWSGI是实现了uwsgi和WSGI两种协议的Web应用服务器。

 

实现篇

  目前常见的部署python web应用程序方案是:

    1.Apache + mod_wsgi

    2.Nginx + gunicorn

    3.Nginx + uwsgi

  以下使用nginx+uwsgi部署一个flask应用,其中nginx作用是反向代理

 

    

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • nginx实战(1):宝塔设置反向代理 宝塔反向代理为什么访问不了
    nginx实战(1):宝塔设置反向代理 宝塔反向代
    以下操作适用于默认80端口转其他地址非80端口情况。添加网站注意:因我只是拿来当反向代理来使用,所PHP为纯静态模式。开启反向代理注:目标URL为最终目的地,发送域名为默认,如设置后无效则修改为上图中所示。修改反向代理配置文件说明: 修改反向代理的配置
    03-08
  • nginx1.18.0
    nginx1.18.0
    目录简介安装yum方式安装nginx编译方式安装systemd管理动态添加第三方模块作用提供静态内容简单的代理服务器设置FastCGI代理配置为注释内容使用nginx的命令以及工作机制nginx配置文件nginx_manual查看nginx安装的模块nginx是一个高性能的HTTP和反向代理web服
    03-08
  • Nginx 通过 certbot 为网站自动配置 SSL 证书并续期
    Nginx 通过 certbot 为网站自动配置 SSL 证书并
    1.1、http 和 https 是什么?简单来说,http 是一个传输网页内容的协议,比如你看到的 http 开头的网站 http://www.163.com ,其网页上的文字、图片、 CSS 、 JS 等文件都是通过 http 协议传输到我们的浏览器,然后被我们看到。而 https 可以理解为“ HTTP ov
    03-08
  • 使用漏洞检查器验证 NGINX 安全设置
    使用漏洞检查器验证 NGINX 安全设置
    介绍需要强大的安全设置来保护 Web 服务器免受网络攻击。我们使用漏洞诊断工具验证了 NGINX 安全设置所需的项目。相关术语回顾什么是 NGINX?摘自维基百科 免费和开源的网络服务器开发时专注于处理性能、高并发和小内存使用具有 HTTP、HTTPS、SMTP、POP3 和 I
    03-08
  • Nginx端口占用问题
    错误信息:nginx: [emerg] listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use)主要是端口被占用,通过如下命令,可以查看该端口被那个应用占用:sudo netstat -ntpl 然后kill -9 PID将其杀死关闭即可解决
    02-13
  • 基于Nginx的网关实现
    基于Nginx的网关实现
    Nginx介绍正向/反向代理 (1)正向代理正向代理,"它代理的是客户端,代客户端发出请求",是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交
    02-13
  • nginx实现unigui群集
    nginx实现unigui群集
    nginx实现unigui群集在笔者写此文的时候,UNIGUI1.50.x的版本已经发布,其提供的HyperServer已经支持群集。有网友还专门为此做了群集方面的测试:从上图可以看出:群集总共开了51个UNIGUI服务程式,总共有13357个客户端(sessions)连接,并且如此多的连接还操
    02-13
  • Linux使用nginx反向代理。可实现域名指向特定端
    在配置80指向域名的时候出现端口占用,使用kill -9无法杀死端口,应使用下面的命令来杀死进程killall -9 nginx(使用完本命令需要再把配置过的配置文件重新启动。命令写在了PS下面)后在root权限下的nginx的sbin下使用./nginx -t(命令重启nginx并检查是否有语
    02-13
  • 装tomcat和nginx心得
    开机启动tomcat1:在/etc/rc.d/init.d目录下生成一个文件tomcat80802:在文件里添加如下内#!/bin/bash#2345 linux运行级别#10开机启动优先级,数值越大越排在前面,最大值100#90关机优先级#chkconfig:2345 10 90#description: tomcat8080 start....start(){ec
    02-13
点击排行