后端服务器设置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. Hibernate单向“一对多”关联

    1. 基于连接表的单向“一对多”关联,应该优先被采用其中指定many-to-many的unique="true",为单向“一对多”,不指定就是单向“多对多” <class n ...

  2. AMQP 协议介绍

    RabbitMQ 是遵从AMQP 协议的, 换句话说, RabbitMQ 就是AMQP 协议的Erlang 的实现(当然RabbitMQ 还支持STOMP2 .MQTT3 等协议) 0 AMQP 的模 ...

  3. Cocos2D-X2.2.3学习笔记10(几何图形)

    我们这节来学习几何图形,即怎样使用Cocos2d-x绘制各种图形.已经贝塞尔曲线 我们查看CCNode中有个draw函数,我们须要将绘制的代码所有写在这个函数里面.写在init函数里是画不出线来的, ...

  4. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 client对象模型API范围

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 client对象模型API范围         本章之前提到过. ...

  5. stm32时钟设置函数

    这里涉及到一个很重要的寄存器,时钟配置寄存器:RCC_CFGR #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defin ...

  6. 在训练CNN时,loss稳定在log(类别数)

    参见知乎问题! https://www.zhihu.com/question/275774218 很多框架都会有一个问题,当卷积 weight NaN 之后,卷积的 output 会变成 NaN.然后 ...

  7. PHP+Redis 实例 页面缓存

    前提分析! 上面的图,我分为了三个层级去做页面缓存,其实不一定要三个层面都实现的,如果你做了页面级的,项目初期是够了,作为接口级,基本可以解决很多吞吐量. 对于上面的三个层级,我用了同一个方法去做. ...

  8. Atitit. 木马病毒的外部class自动加载机制------加载class的方法总结

    Atitit. 木马病毒的外部class自动加载机制------加载class的方法总结 Atitit.java load class methods 1. 动态加载jar文件和class文件. 1 ...

  9. Atitit.互联网 软件编程 数据库方面 架构 大牛 牛人 attilax总结

    Atitit.互联网 软件编程 数据库方面 架构 大牛 牛人 attilax总结 Coolshell 称号.理论与c++ 阮一峰:: 理论高手与js高手 王银:理论高手 赵劼,网名老赵,c#高手 与理 ...

  10. 283. Move Zeroes【easy】

    283. Move Zeroes[easy] Given an array nums, write a function to move all 0's to the end of it while ...