后端服务器设置nginx + uwsgi + django/flask需要注意的问题 - ACE开发者 https://acejoy.com/2018/09/09/547/

后端开发应用中,除了Nginx + php-fpm + PHP这个组合之外,还有一个常用组合是:Nginx + uwsgi + Python组合。这个组合中,经常使用的Python框架是Django和Flask。它们都遵循Python标准的网关协议,所以运行的设置基本是一致的。

这个模式下: 静态资源交给nginx提供服务,其它的请求,转给uwsgi,由python进行处理后返回结果,这与php-fpm是一样的。

uwsgi支持的选项非常多,但是要跟nginx的配置相互匹配,否则就会报错,一般是连不上、502超时错误。这时打开nginx的错误日志可以查看具体原因。

这里面很重要的一点是:确定uwsgi使用的操作模式,就是接口形式是什么类型。

1、如果uwsgi使用http模式,nginx必须用proxy_pass 指令传递。

uwsgi –http :8002

nginx 配置必须是: proxy_pass 指令
例如:
proxy_pass http://127.0.0.1:8002

比如,你用pycharm等IDE跟nginx对接调试,那么就应该使用http的proxy_pass模式,否则就会出现错误,无法使用。

2、如果uwsgi使用socket模式,那么必须使用对应的ip:port 或者 unix socket方式

与之对应的socket,也分成ip:port 和 unix socket,推荐后者。
uwsgi –socket /dev/shm/django.sock –wsgi-file myapp/wsgi.py

nginx配置是:
upstream django {
server unix:/dev/shm/django.sock;
}

必须保持一致!

但是,它同时带来另外一个问题:权限。这个django.sock如果创建的权限与nginx运行时使用的用户权限不匹配,就无法使用,会报告502错误。

在Nginx出现502错误要怎么处理呢?

502错误一般都是nginx后面脚本解析器的错误,不是nginx的错误。比如连接不上就报告502.

第一先把nginx的配置修改成记录错误:
error_log /home/wwwlogs/error_nginx.log error; #crit;
然后查看日志:
2018/05/11 09:47:00 [crit] 5843#0: *2 connect() to unix:/dev/shm/django.sock failed (13: Permission denied) while connecting to upstream, client: 10.1.1.103, server: test.test.com, request: “GET / HTTP/1.1”, upstream: “uwsgi://unix:/dev/shm/django.sock:”, host: “test.test.com”

日志里面的记录说明,原因非常明显。

还有可以参考这里面的说明:
http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

选项文档:
http://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/Options.html?highlight=chmod-socket

这里的知识,希望能对大家有所帮助。

Web服务器集成 — uWSGI 2.0 文档 https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/WebServers.html

uWSGI支持多种集成web服务器的方法。它自己也能够为HTTP请求服务。

Web服务器集成

uWSGI支持多种集成web服务器的方法。它自己也能够为HTTP请求服务。

Nginx

参见

Nginx支持

自Nginx官方发行版本0.8.40起就包含了uWSGI模块。uWSGI包里维护了一个支持Nginx 0.7.x的版本。

这是一个稳定的处理程序,由Unbit提供商业支持。

Apache

参见

Apache支持

Apache2 mod_uwsgi 模块式第一个为uWSGI开发的web服务器集成模块。它稳定,但可以更好地与Apache API集成。

由Unbit提供商业支持。

自uWSGI 0.9.6-dev起,包含了一个名为 mod_Ruwsgi 的第二个Apache2模块。它更加Apache API友好。 Unbit未对mod_Ruwsgi提供商业支持。

在1.2开发周期中,添加了另一个名为 mod_proxy_uwsgi 模块。不久,这应该是基于Apache部署的最好的选择。

Lighttpd (试验性)

该模块是最新开发的,但是在官方的inclusion发布版本中其包含已经被拒了,因为主作者认为 uwsgi protocol 是“重复发明轮子” ,而建议使用一个FastCGI方法。我们尊重这种态度。这个模块会继续存在uWSGI源代码树中,但是当前未对其进行维护。

对于这个处理程序,当前并无商业支持。我们认为这个模块是“试验性的”。

Twisted

这是一个”商用”处理程序,主要在不安装一个完整的web服务器的情况下测试应用的时候有用。如果你想要开发一个uWSGI服务器,那么看看这个模块。 Twisted.

Tomcat

可以使用包含的服务小程序来从Tomcat转发请求到uWSGI服务器。它稳定,但当前缺乏文档。

对于这个处理程序,当前并无商业支持。

CGI

CGI处理程序是用于“偷懒”安装的。不鼓励在生产环境上使用它们。

Cherokee (废弃)

Cherokee web服务器官方支持uWSGI。 Cherokee是快而且轻量的,拥有一个漂亮的admin界面,以及一个不错的社区。从一开始,他们对uWSGI的支持就很棒,在大多数的情况下,我们都推荐使用它。 Cherokee uWSGI处理程序的用户群可能是最大的。Cherokee uWSGI处理程序由Unbit提供商业支持。

Mongrel2 (废弃)

自0.9.8-dev起,对 Mongrel2 Project 的支持通过 ZeroMQ 协议插件可用。

在我们的测试中,Mongrel2几乎通过了我们发送的所有负载。

非常棒和稳定的项目。试试吧 :)

 

nginx + uwsgi + django/flask Nginx + php-fpm + PHP的更多相关文章

  1. Nginx+uWSGI+Django+Python+ MySQL 搭建可靠的Python Web服务器

    一.安装所需工具 yum -y install gcc gcc-c++ rpm-build mysql* libtool-ltdl* libtool automake autoconf libtool ...

  2. nginx+uwsgi+django开发环境搭建

    Nginx+uWSGI+Djangoi开发环境搭建 Django简介,环境搭建 uWSGI简介,安装与配置 Nginx安装与配置 Nginx+uWSGI+Django原理解析 1.django简介,环 ...

  3. nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    nginx+uWSGI+django+virtualenv+supervisor发布web服务器   导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以 ...

  4. Nginx+uwsgi+Django 的web应用环境部署-完整记录

    Python作为当前最火爆最热门,也是最主要的Web开发语言之一,在其二十多年的历史中出现了数十种Web框架,比如Django.Tornado.Flask.Twisted.Bottle和Web.py等 ...

  5. 12,nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的框架 ...

  6. nginx+uWSGI+django+virtualenv+supervisor发布web服务器流程

    导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求)基于wsgi运行的框架有 ...

  7. 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...

  8. 安装Nginx+uWSGI+Django环境

    Ubuntu Server 12.04 安装Nginx+uWSGI+Django环境 今天要介绍的是利用APT源直接apt-get install安装配置我们所需要的环境,首先按惯例先安装MySQL和 ...

  9. debian完整部署 Nginx + uWSGI + Django

    手工部署一个Django服务器真心不容易,需要安装很多东西.从头开始搭建服务器,主要是为了梳理一下后续开发中一般为碰到的平台部署.对后续问题的解决有一定帮助. 通常部署有2中方式: 一种是使用现成提供 ...

随机推荐

  1. C语言-gdb调试工具详解

    回车 重复上一次命令 产生可调试的可执行文件:gcc -g main.c -o main, 必须加上-g选线, 表示在可执行文件中加入源文件信息, 但并不是将源文件嵌入可执行文件, 所以在调试时必须保 ...

  2. requireJS目录

    前言 对于像我这种requireJS初学者而言,requireJS最难理解的部分应该是它的路径问题.晚上随便折腾了一下,算是稍微理清了这个目录问题吧. requireJS学习网址:requireJS中 ...

  3. nginx 404重定向到自定义页面

    在访问时遇到上面这样的404错误页面,我想99%(未经调查,估计数据)的用户会把页面关掉,用户就这样悄悄的流失了.如果此时能有一个漂亮的页面能够引导用户去他想去的地方必然可以留住用户.因此,每一个网站 ...

  4. 【Scala】使用Option、Some、None,避免使用null

    避免null使用 大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是"无",在Java,它是null.在Java 里,null 是一个关键字,不是一个对象,所以对它调用不 ...

  5. chrome 非安全模式解决开发跨域问题

    这个参数可以降低chrome浏览器的安全性,禁用同源策略,利于开发人员本地调试. ps:如果是mac用户(记得 Command + Q 关闭chrome):  open -a Google\ Chro ...

  6. JDBC的常用API

    一.Connection接口: 1.createStatement():创建数据库连接 2.prepareStatement(Stringsql):创建预处理语句 3.prepareCall(Stri ...

  7. javaweb项目开发错误代码

    HTTP状态码(HTTP Status Code) 一些常见的状态码为:200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 所有状态解释:点击查看 1xx(临时响应) ...

  8. 【转】jQuery.extend 函数详解

    原文地址:http://www.cnblogs.com/RascallySnake/archive/2010/05/07/1729563.html JQuery的extend扩展方法:      Jq ...

  9. docker的使用01

    使用Dockerfile构建镜像 vim dockerfile01 #注释信息 FROM ubuntu:latest //导入镜像 MAINTAINER leo "leo@leo.com&q ...

  10. 基于OAuth2.0的统一身份认证中心设计

    1. 引言 公司经历多年发展后,在内部存在多套信息系统,每套信息系统的作用各不相同,每套系统也都拥有自己独立的账号密码权限体系,这时,每个人员都需要记住不同系统的账号密码,人员入职和离职时,人事部门都 ...