首页 后端开发 php教程 nginx+gunicorn+django

nginx+gunicorn+django

Aug 08, 2016 am 09:30 AM
app django gunicorn nbsp

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">官方地址:http://gunicorn.org/</span>
登录后复制
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">                  http://docs.gunicorn.org/en/19.2/</span>
登录后复制

参考地址:http://www.cnblogs.com/ArtsCrafts/p/gunicorn.html

                  http://rfyiamcool.blog.51cto.com/1030776/1276364

一、前言介绍

    WSGI Server有哪些:
        比如Flask、webpy、Django、CherryPy 都自带WSGI Server 。当然性能都不好,自带的web server更多的是测试用途, 线上发布时,则使用高性能的 wsgi server或者是联合nginx做uwsgi 。

    

二、安装gunicorn

     ~$ sudo pip install gunicorn

     如果想让Gunicorn支持异步workers 的话需要安装一下三个python包          

     ~$ sudo pip install greenlet

     ~$ sudo pip install eventlet

     ~$ sudo pip install gevent

说明:如果安装greenlet失败的话,你需要安装 Python headers

    ~$ sudo apt-get install python-dev

我们可以查看一下gunicorn的版本

    ~$ gunicorn --version
          gunicorn (version 19.1.1)

二、gunicorn 命令 使用

    成功安装 gunicorn 之后有以下三个指令你可以直接使用,用来启动 gunicorn 运行 wsgi application或者 wsgi frameworks。

    1. gunicorn

        Gunicorn server最基本的命令,直接用来运行最基本的 wsgi application 。

        用法:gunicorn [OPTIONS] APP_MODULE

        OPTIONS 可选参数 运行gunicorn的配置选项,后面会讲到。

        APP_MODULE 指定 wsgi application文件,书写格式 $(MODULE_NAME):$(VARIABLE_NAME)。其中 module_name用来指定将要运行的 wsgi application文件,可是一个完整的点缀名。

        

比如当前目录myapp目录下有个python包gunicorn_app, gunicorn_app包下有一个wsgi application文件test.py。

        则module_name可以直接写成gunicorn_app.test。

        variable_name表示在module_name文件中要调用的对象(是一个WSGI callable,可以是一个函数)名。

        按照上面的例子,当前目录为/home/workspace/myapp,myapp中有一个包gunicorn_app,test.py代码如下:

def app(environ, start_response):
    """Simplest possible application object"""
    data = 'Hello, World!\n'
    status = '200 OK'
    response_headers = [
        ('Content-type','text/plain'),
        ('Content-Length', str(len(data)))
    ]
    start_response(status, response_headers)
    return iter([data])
登录后复制

     我们将要运行test.py中的app

     gunicorn gunicorn_app.test:app

    2. gunicorn_django

        guniorn_django命令是用来将 Django app部署到 Gunicorn Server上的。

        其实也非常简单,原理和 gunicorn一样,只是gunicorn_django做了特殊处理,使得更加适合Django。

        基本用法:gunicorn_django [OPTIONS] [SETTINGS_PATH]

        OPTIONS 前面已经说过了。
        SETTINGS_PATH django app中 settings.py文件所在的目录,不写的话默认在当前目录下查找。

        不过这种用法适用于django1.4以前,对于Django1.4版本以后强烈推荐使用gunicorn命令。

        

    3. gunicorn_paster

        这个命令有兴趣可以到官方文档研究。

三、Gunicorn配置

     Gunicorn从三个不同的地方读取配置信息。

     第一个地方:从framework定义的配置信息中读取,目前只对Paster框架有效。

     第二个地方:在命令行中定义,命令行中定义的配置信息将会覆盖掉框架中定义的相同的参数名的值。

     第三个地方:创建一个配置文件,把配置信息写入文件(是一个python源文件,所以你就像在写python代码一样)中。

     通过 gunicorn -h 查看所有命令配置信息

     也可以通过官方文档查看更详细信息:http://docs.gunicorn.org/en/19.2/

     

     如在上面myapp例子的基础上

     gunicorn --workers=4 --bind=127.0.0.1:8000 myapp.gunicorn_app.test:app

     上面的命令启动4个workers,绑定到127.0.0.1:8000

     或者你使用配置文件,如下是一个config.py配置文件源码:

     

import multiprocessing

bind = "127.0.0.1:8001"
workers = multiprocessing.cpu_count() * 2 + 1
登录后复制

     gunicorn --config=config.py myapp.gunicorn_app.test:app

四、gunicorn框架介绍

     Gunicorn是基于pre-fork模型的。也就意味着有一个中心管理进程(master process)用来管理worker进程集合。Master从不知道任何关于客户端的信息。所有请求

和响应处理都是由worker进程来处理的。

     Master(管理者)

     主程序是一个简单的循环,监听各种信号以及相应的响应进程。master管理着正在运行的worker集合。

     Worker类型

     1. Sync Workers

         最基本的也是默认的worker type。

         一个同步的worker class,同一时间只能控制一个request请求。

     2. Async Workers

        异步workers的使用是基于Greenlets(通过Eventlet和Gevent)。所以使用此worker type之前一定要安装好python对应的包。

        Greenlets是python多线程协作的一个实现。

     3. Tornado Workers  

         这是一个Tornado worker class。

     

五、Gunicorn部署

       使用Gunicorn必须基于一个代理服务器。

       1. Nginx Configuration

           虽然有很多HTTP代理可以使用,但是我们还是强烈推荐Nginx。如果你选择了其他代理服务器,你需要确认,当你使用默认的Gunicorn workers时,它能够buffers slow clients。没有buffering Gunicorn将很容易受 denial of service attacks的影响。也可使用 slowloris 去核实你的代理服务器是否工作良好。

         如下是一个nginx配置文件实例(假设127.0.0.1:8888端口已经被gunicorn绑定监听):

server {
        #listen   80; ## listen for ipv4; this line is default and implied
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6
        listen 80;
        client_max_body_size 4G;
        server_name www.android_stat.com

        keepalive_timeout 5;



        location / {
                try_files $uri @proxy_to_app;
        }

        location @proxy_to_app {
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_redirect off;
                proxy_pass http://127.0.0.1:8888;
        }
登录后复制
六、监控Gunicorn

       注意:要监控Gunicorn的时候,Gunicorn不能启动daemon模式,如果使用daemon模式会fork出一个进程,这样监控工具就没法监控这个进程。

       我在这只介绍supervisor

      1. Supervisor

          Supervisor可以用来监控进程,下面是一个简单的supervisor的配置文件:

[program:gunicorn]
command=/path/to/gunicorn main:application -c /path/to/gunicorn.conf.py
directory=/path/to/project
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
登录后复制

       

    

以上就介绍了nginx+gunicorn+django,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

京东商城APP如何进行实名认证 京东商城APP如何进行实名认证 Mar 19, 2024 pm 02:31 PM

京东商城APP实名认证怎么弄?京东商城是很多朋友经常使用的一款网上购物平台,大家在购物之前,最好先进行实名认证,这样才能享受到完整的服务,获得更好的购物体验。下面带来京东商城实名认证方法,希望对网友们有所帮助。1、安装并打开京东商城,接着登录个人账号;2、然后点击页面下方【我的】,进入个人中心页面;3、之后再点击右上角的【设置】小图标,前往设置功能界面;4、选择【账号与安全】这一项,来到账户设置页面;5、最后再点击【实名认证】选项,前往填写实名信息;6、安装系统要求填写个人真实信息,完成实名认证

Django vs. Flask:Python Web框架的对比分析 Django vs. Flask:Python Web框架的对比分析 Jan 19, 2024 am 08:36 AM

Django和Flask都是PythonWeb框架中的佼佼者,它们都有着自己的优点和适用场景。本文将对这两个框架进行对比分析,并提供具体的代码示例。开发简介Django是一个全功能的Web框架,它的主要目的是为了快速开发复杂的Web应用。Django提供了许多内置的功能,比如ORM(对象关系映射)、表单、认证、管理后台等。这些功能使得Django在处理大型

注册香港AppleID的步骤及注意事项(畅享香港AppleStore的独特优势) 注册香港AppleID的步骤及注意事项(畅享香港AppleStore的独特优势) Sep 02, 2024 pm 03:47 PM

在全球范围内,Apple公司的产品和服务一直备受用户喜爱。注册一个香港AppleID将带给用户更多的便利和特权,让我们一起来了解一下注册香港AppleID的步骤以及需要注意的事项。如何注册香港AppleID在使用苹果设备时,很多应用和功能都需要使用AppleID进行登录。如果您想下载香港地区的应用或享受香港AppStore的优惠内容,那么注册一个香港AppleID就非常必要。本文将详细介绍如何注册香港AppleID的步骤以及需要注意的事项。步骤:选择语言与地区:在苹果设备上找到“设置”选项,进入

Django框架的优点和缺点:您需要知道的一切 Django框架的优点和缺点:您需要知道的一切 Jan 19, 2024 am 09:09 AM

Django是一个完整的开发框架,该框架涵盖了Web开发生命周期的各个方面。目前,这个框架是全球范围内最流行的Web框架之一。如果你打算使用Django来构建自己的Web应用程序,那么你需要了解Django框架的优点和缺点。以下是您需要知道的一切,包括具体代码示例。Django优点:1.快速开发-Djang可以快速开发Web应用程序。它提供了丰富的库和内

中国联通app怎么退订流量包 中国联通怎样退订流量包 中国联通app怎么退订流量包 中国联通怎样退订流量包 Mar 18, 2024 pm 10:10 PM

  中国联通app能够轻松的满足大家的使用,多样的功能,解决你们的需求,想要办理各种业务,都可以在这里轻松的搞定,有不需要的都可以在这里及时的退订掉,有效的避免后续的损失,很多人在使用手机时,有时感觉流量不够用,就购买了额外的流量包,但下个月又不想要要,就想要马上的退订掉,在这里小编为大家提供退订的方法,让需要的小伙伴们,都可以前来使用起来!  在中国联通app中,找到右下角的“我的”选项,点击它。  在我的界面里,滑动我的服务一栏,点击其中的“我已订购”选

如何升级Django版本:步骤和注意事项 如何升级Django版本:步骤和注意事项 Jan 19, 2024 am 10:16 AM

如何升级Django版本:步骤和注意事项,需要具体代码示例引言:Django是一个功能强大的PythonWeb框架,它持续地进行更新和升级,以提供更好的性能和更多的功能。然而,对于使用较旧版本Django的开发者来说,升级Django可能会面临一些挑战。本文将介绍如何升级Django版本的步骤和注意事项,并提供具体的代码示例。一、备份项目文件在升级Djan

多点app如何开发票 多点app如何开发票 Mar 14, 2024 am 10:00 AM

发票作为购物凭证,对于我们的日常生活和工作都至关重要。那么我们平时在使用多点app进行购物的时候,如何在多点app中轻松开具发票呢?下文中本站小编就将为大家带来详细的多点app开设发票详细操作步骤攻略,想要了解的用户们千万不容错过,快来跟着文本一起操作了解一下吧!在【发票中心】点击【多点超市/自由购】在已完成的订单页中选择需要开票的订单,点击下一步填写【发票信息】,【收件人信息】,确认无误后点击提交过个几分钟后,进入收件邮箱,打开邮件,点击电子发票下载地址最后,下载打印电子发票

Blackmagic 的专业级视频应用程序登陆 Android,但您的手机可能无法运行它 Blackmagic 的专业级视频应用程序登陆 Android,但您的手机可能无法运行它 Jun 25, 2024 am 07:06 AM

Blackmagic Design 终于将其广受好评的 Blackmagic Camera 应用程序带到了 Android 平台。专业摄像机应用程序可免费下载,并提供完整的手动控制。这些控制旨在让您更轻松地获得专业级 cin

See all articles