分享好友 系统运维首页 频道列表

Nginx+uWSGI部署Python Web应用

Nginx教程  2023-02-10 02:070

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作用是反向代理

 

    

查看更多关于【Nginx教程】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
Nginx端口占用问题
错误信息:nginx: [emerg] listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use)主要是端口被占用,通过如下命令,可以查看该端口被那个应用占用:sudo netstat -ntpl 然后kill -9 PID将其杀死关闭即可解决

0评论2023-02-13565

Linux使用nginx反向代理。可实现域名指向特定端口
在配置80指向域名的时候出现端口占用,使用kill -9无法杀死端口,应使用下面的命令来杀死进程killall -9 nginx(使用完本命令需要再把配置过的配置文件重新启动。命令写在了PS下面)后在root权限下的nginx的sbin下使用./nginx -t(命令重启nginx并检查是否有语

0评论2023-02-13636

装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

0评论2023-02-13333

nginx 之 proxy_pass的使用
使用注意事项proxy_pass在nginx中作代理转发使用。如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。假设下面四种情况分别用 http://192.168.1.1/proxy/test.html 进行访问。第一种:location /proxy/

0评论2023-02-13675

用Nginx代理请求,处理前后端跨域 用nginx代理请求,处理前后端跨域文件
  自从前端spa框架出现后,都是前后端分离开发了。我们在开发的时候难免会遇到跨域的问题。跨域这种问题解决的方法基本都是在服务端实现的。以java为例,我知道的有3种方法处理跨域:  1.使用 @CrossOrigin 注解对每一个接口进行跨域处理,缺点是比较麻烦

0评论2023-02-13771

手动上传图片到nginx下可访问,程序上传后访问图片报403
1. 首先查看文件权限2. 初步确定是服务器权限问题2.1 解决方案一:更改文件权限2.2 解决方案二:修改nginx运行用户 1. 首先查看文件权限#指令如下ls -l2. 初步确定是服务器权限问题403 forbidden错误是禁止读取访问,也就是说服务器理解了请求,但是不允许访问

0评论2023-02-13745

check nginx配置文件错误:[emerg]: getpwnam(“nginx”) failed
 1、错误提示:[root@server include]# /application/nginx/sbin/nginx -t -c /applications/nginx/nginx/nginx.confnginx: [emerg] getpwnam("nginx") failed in /applications/nginx/nginx/nginx.conf:2nginx: configuration file /application/nginx/ngin

0评论2023-02-13620

Nginx 499的问题 PHP 异步 HTTP 与 NGINX 499
PHP 异步 HTTP在 PHP 代码中提交异步 HTTP 请求比较常用的方式是通过 fsockopen/fwrite/fclose 来实现,请参考如下代码。function post($host, $path, $port, $data) {$post = http_build_query($data);$len = strlen($post);$fp = fsockopen($host, $port,

0评论2023-02-13458

nginx FastCGI模块(FastCGI)配置
http://www.howtocn.org/nginx:nginx%E6%A8%A1%E5%9D%97%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C%E4%B8%AD%E6%96%87%E7%89%88:standardhttpmodules:fastcginginx官方文档:http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html 摘要这个模块允许nginx

0评论2023-02-10486

nginx+tomcat反向代理下使用tomcat-redis-session-manager进行session共享中值得注意的一个问题
公司目前项目使用nginx反向代理+多个tomcat进行负载均衡,之前使用ip_hash策略进行session控制。近期有考虑不再使用ip_hash策略,所以需要进行session共享。根据项目实际情况,拟考虑使用开发配置比较简单,应用比较广泛的tomcat-redis-session-manager方式进

0评论2023-02-10303

更多推荐