• 04-nginx+uwsgi+django+pythonav


    一、Uwsgi代理基本概述

    1、什么是WSGI

     WSGI,全称Web Server Gateway Interface 是为Python 语言定义的Web 服务器 和 Web应用程序之间的一种简单通用的接口.

    WSGI的官方定义,the Python Web Server Gateway Interface. 从名字就可以看出来,这是一个Gateway网关.那么网关的作用就是在协议之间进行转换.

    也就是说,WSGI就像是一座桥梁,一边连着Web服务器,另一边连着web应用程序.

    2、什么是uWSGI

    uWSGI实现了WSGI、http等数据交换协议。简单来说:我们将项目通过uwsgi方式运行,就可以直接对外提供服务,而无需依托于Nginx。Uwsgi传送门

    3、uWSGI为什么需要nginx

    通常情况下Python中的Django框架Flask框架可以通过Uwsgi方式对外提供服务。为什么还需要Nginx?

    1. 安全:后端服务直接以http对外提供访问,往往会暴露后端的真是服务,如果使用nginx可以很好的隐藏后端的服务,并且nginx能够实现安全限制、Rewrite、HTTPS等功能(这些都是uwsgi无法实现的。)

    2.效率:nginx可以直接处理静态资源,然后将动态内容通过uWSGI协议转发给后端Django,实现动静分离,提供更好的请求与相应。

    【图片】

    二、Uwsgi代理配置

    步骤一、安装python3的环境

    步骤二、安装Django框架、uwsgi

    步骤三、配置Django工程

    步骤四、配置uWSGI、配置Nginx

    1、安装Python3环境

    yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel 
    sqlite-devel gcc gcc-c++  openssl-devel zlib zlib-devel python3 python3-devel -y

    2、安装django框架、uwsgi

    pip3 install -i https://mirrors.aliyun.com/pypi/simple/ --upgrade pip
    pip3 install -i https://mirrors.aliyun.com/pypi/simple/ django==2.1.8
    pip3 install -i https://mirrors.aliyun.com/pypi/simple/ uwsgi

    3、使用Django新建工程,运行如下命令

    django-admin startproject demosite
    cd demosite
    python3 manage.py runserver 0.0.0.0:8002

    4、在浏览器内输入http://IP:8002正常会提示The install worked successfully! Congratulations!

    vim demosite/settings.py
    ALLOWED_HOSTS = ['*']

    5、配置Django工程以由uwsgi方式运行

    cat /opt/demosite/uwsgi.ini 
    [uwsgi]
    #uwsgi监听的端口
    socket = 127.0.0.1:9999
    #uwsgi启动进程数
    workers = 2
    #最大接收的请求数
    max-requests = 1000
    #buffer缓冲区大小
    buffer-size = 30000
    #进程pid存放路径
    pidfile = /run/uwsgi.pid
    #uwsgi日志存储路径
    daemonize = /var/log/uwsgi.log

    6、通过uwsgi方式启动django项目,默认监听127.0.0.1,需要配置nginx代理才能对外提供服务

    uwsgi --ini /opt/demosite/uwsgi.ini
    netstat -lntp | grep 9999
    tcp        0      0 127.0.0.1:9999          0.0.0.0:*               LISTEN      9827/uwsgi

    配置Nginx,将用户发送的http请求, 通过uwsgi_pass 传递给  Uwsgi 服务端

    cat /etc/nginx/conf.d/uwsgi.kkkedu.com.conf 
    server {
        listen 80;
        server_name uwsgi.kkkedu.com;
        client_max_body_size 100M;
        index index.html;           #默认返回页面
    
        location / {
            uwsgi_pass 127.0.0.1:9999;
            uwsgi_param UWSGI_CHDIR /opt/demosite;  #工程所在的路径
            uwsgi_param UWSGI_SCRIPT demosite.wsgi; #demosite/wsgi接口文件
            include uwsgi_params;
        }
    }

    三、nginx+uwsgi+django+pythonav

    cd /code/
    wget http://cdn.xuliangwei.com/pythonav.zip
    unzip pythonav.zip
    pip3 install -i https://pypi.doubanio.com/simple/ -r /code/pythonav/requirements.txt

    1、登录202服务器创建一个pythonav的库:

    vim pythonav/pythonav/settings.py
    # ################### MySQL ###################
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'pythonav',
            'USER': 'all',
            'PASSWORD': '1‘,
            'HOST': '10.0.0.202',
            'PORT': '3306',
        }
    }
    cd /code/pythonav
    python3 manage.py makemigrations
    python3 manage.py migrate
    python3 manage.py createsuperuser
    python3 manage.py collectstatic

    2、配置uwsgi

    vim pythonav_uwsgi.ini

    [uwsgi]
    #uwsgi监听的端口
    socket = 127.0.0.1:8811
    chdir = /code/pythonav/
    wsgi-file = pythonav/wsgi.py
    #uwsgi启动进程数
    processes = 4
    threads = 10
    #最大接收的请求数
    max-requests = 1000
    #buffer缓冲区大小
    buffer-size = 30000
    #进程pid存放路径
    pidfile = /run/uwsgi-pythonav.pid
    #uwsgi日志存储路径
    daemonize = /var/log/uwsgi-pythonav.log

    3、配置nginx

    cat /etc/nginx/conf.d/pythonav.kkkedu.com.conf 
    server {
        listen 80;
        server_name pythonav.kkkedu.com;
        client_max_body_size 100M;
    
        location /static {
            alias /code/pythonav/static;
        }
        
        location / {
            uwsgi_pass 127.0.0.1:8811;
            include uwsgi_params;
        }
    }
    nginx -t
    systemctl reload nginx

    4、重启当前项目的uwsgi

    kill $(ps -ef |grep bbs_uwsgi | grep -v grep  | awk '{print $2}' | xargs )
    uwsgi --ini /code/blog_sever/blog_uwsgi.ini 
    netstat -lntp
  • 相关阅读:
    元类
    redis--py链接redis【转】
    redis--py操作redis【转】
    python format 用法详解
    初识多线程__下
    mysql学习笔记五 —— MHA
    mysql学习笔记四 —— AB复制
    mysql学习笔记三 —— 数据恢复与备份
    mysql学习笔记二 —— 权限体系
    mysql学习笔记一 —— 数据的增删改查
  • 原文地址:https://www.cnblogs.com/kongxiangqun/p/13871696.html
Copyright © 2020-2023  润新知