Nginx是一个非常好的反向代理和动静分离和web服务器。
uWSGI是一个针对python非常好的web服务器和中间件。
Django是一个非常好的Python web 框架。
Pytohn是一门非常好的编程语言。
四个非常好的软件组合,会碰撞出怎样的火花?敬请期待!
架构原理剖析:
概念说明:
- APP(应用程序):就是开发者写的应用程序,例如django,bottle这些。记录怎么处理客户端发来的请求的逻辑部分。
- WSGI:是一个协议,Python用于Web开发的协议,Python专用的协议。
- uWSGI:是一个程序,可充当Web服务器或中间件。
- uwsgi:是uWSGI程序实现的一个自有的协议,处理python程序速度很快。
采用二进制来存储数据,在存储空间和解析速度上,都优于字符串型协议。
推荐一篇文章:
http://www.cnblogs.com/Xjng/p/aa4dd23918359c6414d54e4b972e9081.html
本机系统:Ubuntu 17 64bit
环境安装:
安装MySQL:
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
安装Django:
sudo apt-get python-django
安装pip:
sudo apt-get python-pip
安装pymysql:
pip install pymysql
安装uWSGI:
sudo apt-get uwsgi uwsgi-plugin-python
环境配置:
准备Django项目,如果已经存在Django项目则跳过这步。
一、 Django配置
1、创建一个名字问mysite的项目:
django-admin startproject mysite
2、创建一个APP:
cd mysite
python manage.py startapp blog
3、生成可运行的的APP,或者自行编写一个简单的APP,需要Django基础,实在不会就百度,有很多例子。
python manage.py migrate
4、运行Django项目,默认为8000端口,访问127.0.0.1:8000请求成功就说明以上3步正常,失败则需自行解决。
python manage.py runserver
二、uWSGI配置
1、创建测试脚本:
vi test.py
#!/usr/bin/env python
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return ["Hello World"]
2、测试uWSGI是否能正常工作:
uwsgi --plugin python --http-socket :8000--wsgi-file test.py
访问127.0.0.1:8000,有显示Hello World则uWSGI正常。
3、测试uWSGI和Django:
创建Django项目时,Django项目下会默认生成wsgi.py文件,如果没有则新建。
例如mysite项目:……./mysite/mysite/wsgi.py
文件内容:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE","mysite.settings")
from django.core.wsgi importget_wsgi_application
application = get_wsgi_application()
uwsgi --plugin python --http-socket :8000--wsgi-file mysite/wsgi.py
访问127.0.0.1:8000,有显示Django程序结果则uWSGI+Django正常合作。
4、配置uWSGI配置文件,方便启动。配置文件有三种 ini、XML、YMAL,这里使用ini
配置文件路径可自定义,我这里直接放在Django项目下。
vi …/mysite/uwsgi.ini
[uwsgi]
#socket端口号
socket = :8000
#python插件,不用则报选项不存在的错误
plugin = python
#可选项
pythonpath = /www
#APP目录
chdir = /www/python/mysite
#wsgi.py文件位置,和配置文件存放在同级目录下,我这里使用相对路径。
module = mysite.wsgi
#指定Django的wsgi.py文件位置
wsgi-file =/www/python/mysite/mysite/wsgi.py
process = 4
threads = 2
#日志路径
daemonize = /var/log/uwsgi/uwsgi.log
三、Nginx配置
一般加一个虚拟主机即可,全局配置文件使用默认即可。
1、 虚拟主机配置:
server {
listen 8080;
server_name 127.0.0.1;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /www/python/myiste;
location / {
uwsgi_pass 127.0.0.1:8000;
include /etc/nginx/uwsgi_params;
uwsgi_read_timeout 300;
uwsgi_param Host $host;
uwsgi_param X-Real-IP $remote_addr;
uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
uwsgi_param X-Forwarded-Proto $http_x_forwarded_proto;
}
}
2、 重启Nginx使其配置文件生效:
service nginx restart
3、 查看8080端口是否开启
netstat -tnlp
四、结果测试
1、运行uWSGI:
uwsgi --ini uwsgi.ini
2、查看8000和8080端口是否起来,起来则成功,继续测试。
netstat -tnlp
4、 访问127.0.0.1:8080
是否显示Django项目,显示该架构搭建成功。