Django项目中的Nginx+uWSGI部署
配合另一篇博客共同饮用Django项目服务器部署(2024最新)
一:Nginx + uWSGI部署框架
- 用户浏览器向nginx发送请求,nginx判断请求是动态海事静态,如果是静态请求,则直接返回静态文件。如果是动态请求,则将请求转发给uwigi服务器,uwigi服务器调用我们的django进行处理请求,并返回结果。
1.1 Nginx
- Nginx是一个Web服务器,其中的HTTP服务器功能和uWSGI功能很类似。
- 但是Nginx还可以用作更多用途,比如最常用的反向代理、负载均衡、拦截攻击等,而且性能极高。
1.2 WSGI接口
- WSGI是Web 服务器(uWSGI)与 Web 应用程序或应用框架(Django)之间的一种低级别的接口。(Python专业的web协议)。
1.3 uWSGI服务器
- uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。
1.4 uwsgi协议
- uwsgi是Nginx服务器和uWSGI服务器的通信协议,规定了怎么把请求转发给应用程序和返回。
1.5 请求处理整体流程:
各模块作用:
- nginx:是对外的服务器,外部浏览器通过url访问nginx,nginx主要处理静态请求。
- uWSGI:是对内的服务器,主要用来处理动态请求。
- uwsgi:是一种web协议,接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi。
- wsgi:是python专用的web协议,根据请求调用应用程序(django)的某个文件,某个文件的某个函数。
- django:是真正干活的,查询数据等资源,把处理的结果再次返回给WSGI, WSGI 将返回值进行打包,打包成uwsgi能够接收的格式。
- uwsgi接收wsgi发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器。
二 生产环境部署
2.1uwsgi
- 安装
pip install uwsgi
- uwsgi的配置
将Django项目中的settings.py中的两个配置进行修改:
DEBUG = FALSE
ALLOWED_HOSTS = [*]
在项目下新建一个配置文件uwsgi.ini:
[uwsgi]
# 1: uwsgi直接作为web服务器时,使用的ip和端口
http= 127.0.0.1:8000
# 2:指定项目的目录
chdir =xxx
# 3: 指定项目中的wsgi.py所在的目录:(这个文件是usgi的启动入口)
wsgi-file = xxx/wsgi.py
# 4:指定uwsgi工作的进程数
processes = 4
# 5: 指定工作的每个进程下的线程数
threads = 2
# 6: 主进程的配置
master = True # 开启主进程
pidfile = uwsgi.pid # 在项目中的wsgi.py所在的目录下,生成一个uwsgi.pid专门记录主进程的id
# 7: 指定uwsgi的日志文件
daemonize = uwsgi.log
# 8:指定运行的虚拟环境的路径
virtualenv = xxx/django_env
- 运行命令
启动
uwsgi --ini xxxuwsgi.ini
停止
uwsgi --stop uwsgi.pid
2.2 nginx
利用nginx做反向代理和处理静态文件。
- 下载
yum install nginx -y
- 修改配置文件
server {location / {# 包含uwsgi的请求参数include uwsgi_params;# 转交给uwsgiuwsgi_pass 127.0.0.1:8000}
}
注: 在django的settings配置文件中设置静态文件:
#自己项目下的
STATIC_ROOT = '/xxx/xxxx/static/'
#命令
python manage.py collectstatic
可见另一篇博客Django项目服务器部署(2024最新)