欢迎来到 Kong Xiangqun 的博客

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

 

posted @ 2020-10-25 00:00  kongxiangqun20220317  阅读(184)  评论(0编辑  收藏  举报