后端服务器设置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. 树莓派之OLED12864视频播放—BadApple

    代码地址如下:http://www.demodashi.com/demo/13218.html 概述 本篇教程讲述了使用树莓派驱动OLED12864液晶屏,并在液晶屏上播放动画和视频. 硬件平台 树莓 ...

  2. iOS即时通讯输入框随字数自适应高度

    代码地址如下:http://www.demodashi.com/demo/13210.html 前言 本人最近在研究socket与聊天界面的UI,在写聊天界面UI的时候是模仿微信的界面其中的文字输入框 ...

  3. poj 3592 Instantaneous Transference 【SCC +缩点 + SPFA】

    Instantaneous Transference Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6204   Accep ...

  4. Refactoring之——代码的坏味道(二)过大的类 &(三)基本类型偏执

    1.1.2 Large Class(过大的类) 特征:一个类包含过多的字段.方法.代码行. 问题原因: 类通常一开始很小,但是随着程序的增长而逐渐膨胀. 类似于过长方法,程序员通常觉得在一个现存类中添 ...

  5. 有关IM即时通讯原理

    在网上搜索了一些资料,谈谈自己对IM即时通讯的理解 IM全称为Instant Messaging,即时通讯,如qq那种的. 现在有两个用户UserA, UserB, 俩人是一个IM通讯软件的好友,Us ...

  6. 485. Max Consecutive Ones【easy】

    485. Max Consecutive Ones[easy] Given a binary array, find the maximum number of consecutive 1s in t ...

  7. jquery样式表和效果

    $("p").css({ "color": "#ff0011", "background": "blue&qu ...

  8. C 调用 lua 函数

    C 调用 lua 函数 需要考虑的问题: 1. 使用 lua_pcall 可以调用 lua 函数,首先把 lua 函数入栈,然后把参数入栈, lua_pcall(luaState, 参数个数, 返回值 ...

  9. 八款开源 Android 游戏引擎[转]

    记录一下,以备不时之需~~~~~ 虽然android学了点点,然后现在又没学了(我为啥这么没有恒心呢大哭).以后有时间还是要继续学android的,一定要啊!虽然现在没学android游戏编程,不过还 ...

  10. 常用校验算法CRC、MD5、SHA_转

    1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...