目录
一:Nginx + uWSGI部署框架
- 首先用户浏览器向nginx发送请求,nginx判断是动态请求还是静态请求,如果是静态请求,则直接返回静态文件。如果是动态请求,则将请求转发给uwsgi服务器,uwsgi调用我们的django进行处理请求,然后一步一步的再返回。
1.1:WSGI接口:
- WSGI是Web 服务器(uWSGI)与 Web 应用程序或应用框架(Django)之间的一种低级别的接口
1.2:uWSGI 服务器:
- uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。
1.3: uwsgi协议:
- uwsgi是Nginx服务器和uWSGI服务器的通信协议,规定了怎么把请求转发给应用程序和返回。
二: uwsgi
2.1: uwsgi的安装:
- pip install uwsgi
2.2:uwsgi的配置:
-
1: 将Django项目中的settings.py中的两个配置进行修改:
DEBUG = FALSE ALLOWED_HOSTS = [*]
-
2: 在项目下新建一个配置文件uwsgi.ini:
[uwsgi] # 1: uwsgi直接作为web服务器时,使用的ip和端口 http= 127.0.0.1:8000 # 2:指定项目的目录 chdir = /home/python/Desktop/meiduo_mall_project/meiduo_mall # 3: 指定项目中的wsgi.py所在的目录:(这个文件是usgi的启动入口) wsgi-file = meiduo_mall/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 = /home/python/.virtualenvs/django_env
2.3:启动和停止
-
uwsgi --ini 配置文件路径
例如: uwsgi --ini uwsgi.ini
-
uwsgi --stop uwsgi.pid路径
例如: uwsgi --stop uwsgi.pid
三:uwsgi和Nginx如何关联
3.1: 修改uwsgi的配置文件:
[uwsgi]
# 1: uwsgi与nginx连接时,使用的ip和端口
socket = 127.0.0.1:8000
3.2: 修改Nginx的配置文件:
server {
location / {
# 包含uwsgi的请求参数
include uwsgi_params;
# 转交给uwsgi
uwsgi_pass 127.0.0.1:8000
}
}
四:Nginx 配置静态文件
4.1: 修改Nginx的配置文件:
# 增加一个location
location /static {
# 指定静态文件存放的目录
alias /var/www/static/;
}
4.2: 将项目用到的所有静态文件指定到某个目录下:
-
1: 在django的settings配置文件中:
STATIC_ROOT = '/var/www/static/'
-
2: 修改static文件的权限:sudo chmod 777 /var/www/static/
-
3: 运行命令: python3 manage.py collectstatic
五:Nginx转交请求给其他地址:
案例: Celery实现了主页的页面静态化,我们想让如果前端传递的是主页,专门找我的一个Nginx服务器去要。
5.1: Nginx增加配置项:
location = / {
# 传递给静态文件的nginx服务器。
proxy_pass http://192.168.203.153: 8082;
}
六: Nginx实现负载均衡的配置:
-
复制多台 uwsgi.ini文件修改文件(id和端口),根据这些文件启动Django。
-
修改Nginx配置文件:
# 1: 在server外面增加配置upstream upstream 名字 { server 127.0.0.1: 8080; server 127.0.0.1: 8081; } # 2: 指定上游名字,则会随机选择其中一个转发。 location / { include uwsgi_params; uwsgi_pass 名字; }