• 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
  • 相关阅读:
    第八章 多线程编程
    Linked List Cycle II
    Swap Nodes in Pairs
    Container With Most Water
    Best Time to Buy and Sell Stock III
    Best Time to Buy and Sell Stock II
    Linked List Cycle
    4Sum
    3Sum
    Integer to Roman
  • 原文地址:https://www.cnblogs.com/kongxiangqun/p/13871696.html
Copyright © 2020-2023  润新知