centos7下 django+uwsgi+nginx
2021/4/7 7:11:58
本文主要是介绍centos7下 django+uwsgi+nginx,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、前言
在工作中 写了一个小的 django项目,需要上线,考虑使用 uwsgi+nginx
,就对部署过程进行总结一下。
二、理论铺垫
1、为什么要用 uwsgi
+nginx
?
一个成熟的站点提供服务,需要 Web 服务器 [静态数据] 和 App 服务器[动态数据]
Web 服务器目前属 Nginx 最强大,请求代理过来后,把数据返回给请求客户端,但是目前的互联网发展时代,都是包含动态数据处理的,这样一般 Nginx 不处理业务逻辑,就外包给后端的 App 服务器,这里就是你的 django 服务器。
2、python manage.py runserver
启动方式
平时开发的时候 大家都基本上启动服务都是通过 python manage.py runserver
去直接启动项目,那为什么上线就不可以通过这种方式启动呢?
大佬源码解析:https://blog.csdn.net/Aifore/article/details/86721626
从上可以看到,其实通过 python manage.py runserver
开启也是 django内置的web服务器是封装的wsgiref,是一个用于开发调试的简易服务器。此服务器和uwsgi都符合wsgi协议,当然是可以实现你的需求。但是性能肯定是很低的。
3、uWSGI
1、wsgi: 一种实现python解析的通用接口标准/协议,是一种通用的接口标准或者接口协议,实现了python web程序与服务器之间交互的通用性。 利用它,web.py或bottle或者django等等的python web开发框架,就可以轻松地部署在不同的web server上了; 2、uwsgi: 同WSGI一样是一种通信协议 3、uwsgi协议: 是一个uWSGI服务器自有的协议,它用于定义传输信息的类型,它与WSGI相比是两样东西。 4、uWSGI: 一种python web server或称为Server/Gateway uWSGI类似tornadoweb或者flup,是一种python web server,uWSGI是实现了uwsgi和WSGI两种协议的 Web服务器,负责响应python 的web请求。因为apache、nginx等,它们自己都没有解析动态语言如php的功能, 而是分派给其他模块来做,比如apache就可以说内置了php模块,让人感觉好像apache就支持php一样。 uWSGI实现了wsgi协议、uwsgi协议、http等协议。 Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。 参考大佬文章:https://blog.csdn.net/c465869935/article/details/532421262
4、WSGI的工作原理,从http原始请求到web框架的处理过程
http的请求 - 响应过程,简单而言,就是浏览器向服务器发送请求,服务器处理请求并返回响应给浏览器展示。
这个请求 - 响应的过程具体是如何实现的呢?整个过程,如下图所示。
参考大佬文章:https://blog.csdn.net/qq_39378657/article/details/107302561
5、项目流程和每个组件的用途
1、首先客户端请求服务资源, 2、nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包、分析, 3、如果是静态文件请求就根据nginx配置的静态文件目录,返回请求的资源, 4、如果是动态的请求,nginx就通过配置文件,将请求传递给uWSGI;uWSGI 将接收到的包进行处理,并转发给wsgi, 5、wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi, 6、wsgi将返回值进行打包,转发给uWSGI, 7、uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。 *注:不同的组件之间传递信息涉及到数据格式和协议的转换
6、作用
1. 第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程; 2. 在nginx上加上安全性或其他的限制,可以达到保护程序的作用; 3. uWSGI本身是内网接口,开启多个work和processes可能也不够用,而nginx可以代理多台uWSGI完成uWSGI的负载均衡; 4. django在debug=False下对静态文件的处理能力不是很好,而用nginx来处理更加高效。
三、安装与配置
1、安装 nginx
yum install nginx
2、安装 uwsgi
pip3 install uwsgi
四、项目配置
1、django项目配置
1、setting.py
文件配置
# 用于收集静态文件 STATIC_ROOT = '/usr/share/nginx/dpia/static/' STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), )
2、运行 python manage.py collectstatic
通过运行上边代码就可以从 /usr/share/nginx/dpia/static/
目录下看到你的静态文件
2、配置 uwsgi
1、项目地址:/opt/dpia
2、uwsg.ini 文件地址 /opt/dpia/uwsgi.ini
3、uwsg.ini 文件内容
[uwsgi] # 项目目录 chdir = /opt/dpia # 指定sock的文件路径,用于和 nginx 进行数据交互的端口,一定要和nginx配置保持一致!! socket = 127.0.0.1:8082 # 指定项目的application module = dpia.wsgi # 启用主进程 master = true # 进程数量 processes = 10 # 配置每个进程的线程数 threads = 2 max-requests = 2000 # 前后端传输数据大小 buffer-size = 65536 # 指定uWSGI日志的存储路径 daemonize = /opt/dpia/uwsgi.log # 服务启动 pid pidfile = /opt/dpia/uwsgi.pid # 自动移除unix Socket和pid文件当服务停止的时候 vacuum = true
3、uwsgi操作命令
# 后台运行 uwsgi -d --ini uwsgi.ini # 单纯启动 uwsgi --ini uwsgi.ini # 查看对应程序的进程号码 ps aux|grep uwsgi # 关闭 uwsgi --stop uwsgi.pid # 杀死进程 pkill -f uwsgi -9 # 重启uwsgi uwsgi --reload uwsgi.pid
4、配置 nginx
1、文件路径:/etc/nginx/conf.d/dpia.conf
2、文件内容
server { # 启动的nginx进程监听请求的端口 listen 80; #定义使用域名访问 server_name localhost; charset utf-8; access_log /etc/nginx/logs/dpia_access.log; error_log /etc/nginx/logs/dpia_error.log; # max upload size client_max_body_size 75M; # adjust to taste # 静态文件访问的url location /static/ { # 指定静态文件存放的目录 alias /usr/share/nginx/dpia/static/; } #location /static/ { #try_files $uri /usr/share/nginx/dpia/static/; # } # 将所有非媒体请求转到Django服务器上 location / { # 包含uwsgi的请求参数,路径为uwsgi_params绝对路径 include /etc/nginx/uwsgi_params; # 转交请求给uwsgi uwsgi_pass 127.0.0.1:8082; } }
3、nginx命令
nginx -t nginx -s reload
五、总结
总体不是特别难,注意小细节。
这篇关于centos7下 django+uwsgi+nginx的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-17Nginx实用篇:实现负载均衡、限流与动静分离
- 2024-08-21宝塔nginx新增8022端口方法步骤-icode9专业技术文章分享
- 2024-08-21nginx配置,让ws升级为wss访问的方法步骤-icode9专业技术文章分享
- 2024-08-15nginx ws代理配置方法步骤-icode9专业技术文章分享
- 2024-08-14nginx 让访问带有/relid的地址返回404 ,例子 /relid-x-0.36-y-131.html-icode9专业技术文章分享
- 2024-08-14nginx 判断地址有/statics/的路径,指向到/home/html/statics/目录-icode9专业技术文章分享
- 2024-07-24解锁Nginx日志的宝藏:GoAccess——你的实时、交互式Web日志分析神器!
- 2024-03-29fail2ban nginx
- 2024-03-18install nginx proxy manager
- 2024-01-2444从零开始用Rust编写nginx,命令行参数的设计与解析及说明