nginx + supervisor + gunicorn +web应用的完整流程

Django部署全攻略

一、架构

首先浏览器发起 http 请求到 nginx 服务器,它们之间走的是 http 协议,nginx 根据接收到请求包,进行 url 分析,判断访问资源的类型。

如果是静态资源,直接读取静态资源返回给浏览器,如果请求的是动态资源就转交给 uWSGI 服务器。

因为 nginx 和 uWSGI 都懂 uwsgi 协议,uwsgi 为纯二进制的协议,不用去封装七层协议中的协议体中的各种状态位。效率比较快,所以 nginx 和 uWSGI 之间走 uwsgi 协议。此时 uWSGI 需要通过 socket 模式启动。【http 纯文本型协议(超文本传输),效率不是很高】

uWSGI 服务器根据自身的 WSGI 协议,找到对应的 Django 框架。

Django 框架下的应用进行逻辑处理后,将返回值发送到 uWSGI 服务器。

uWSGI 服务器再返回给 nginx,最后 nginx 将返回值返回给浏览器进行渲染显示给用户。

项目结构:

二、利用web框架(django、flask、web.py...)写一个wsgi的app

api.py文件:

#coding:utf-8
import web

# url映射
urls = (
    '/(.*)', 'hello')

# url处理的类
class hello:       
    def GET(self, name):
        print(web.ctx.env.items())#获取所有的headers
        if not name:
            name = 'World'
        return 'Hello, ' + name + '!'

# 创建一个基于我们刚提交的URL列表的application。这个application会在这个文件的全局命名空间中查找对应类。
app = web.application(urls, globals())
application = app.wsgifunc()         # 这两行放到外面

if __name__ == "__main__":
    app.run()  #启动web应用

直接执行这个py文件也可以启动web应用:python api.py。

三、通过gunicorn运行 app(wsgi application)​​​​​​​

采用使用配置文件方式启动gunicorn,config.py:

#coding:utf-8
import logging
import logging.handlers
from logging.handlers import WatchedFileHandler
import os
import multiprocessing
bind = '0.0.0.0:8080'         #绑定ip和端口号
backlog = 512                 #最大挂起的连接数
chdir = '/home/mytest/'       #gunicorn要切换到的目的工作目录
timeout = 30                  #超时
workers = multiprocessing.cpu_count() * 2 + 1    #工作进程数
loglevel = 'info'    &n
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值