一、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