Nginx+uWSGI部署

本文详细介绍了如何使用Nginx和uWSGI部署Django Web框架。从理解WSGI接口、uWSGI服务器和uwsgi协议开始,逐步讲解uWSGI的安装、配置及启动停止。接着,阐述了如何配置Nginx以处理静态文件,并将动态请求转发给uWSGI。此外,还涵盖了通过Nginx实现负载均衡的配置步骤,确保高可用性和性能。
摘要由CSDN通过智能技术生成

一: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 名字;
    }
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RStanwen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值