django+uwsgi+nginx联合使用的简单配置
简介
Django是一个非常强大的python后端开发框架
uwsgi是一种线路协议
Nginx是一个强大的Web服务器,主要功能是反向代理和优秀的静态资源处理能力
下载、安装与测试
本次探讨主要基于CentOS7.2系统,系统预装的有python2.7,自己之前手动升级了python3.7.0版本。具体过程可参考网上教程
django的安装及简单项目的搭建可以参考网上教程,在此不做过多赘述
使用pip3工具安装uwsgi
pip3 install uwsgi
安装完成后开始测试
新建test.py测试文件,内容:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "Hello World" #python3版本应改为return [b"Hello Wrold"]
完成之后启动uwsgi
uwsgi --http :8000 --wsgi-file test.py
如果启动成功,应该会类似于下面这样
此时在客户端浏览器里输入
http://服务器公网IP:8000
应该会显示Hello World字样的界面,表示测试成功
接下来安装Nginx
yum install nginx -y
安装完成后可以直接使用nginx命令启动
然后对nginx服务器的配置可以参考另一片文章:https://blog.csdn.net/weixin_42595385/article/details/84782205
接下来就是通过uwsgi来达到使Nginx与Django协作的目的了
连接uwsgi与Django
单独通过uWSGI来作为django的web服务器也是可行的,但在实际生产环境中效果远没有uwsgi+django+nginx三者协作好
首先cd进入到django项目中到与manage.py同级目录,假设django项目结构为
helloworld
- hello
- db.sqlite3
- app
- admin.py
- apps.py
- __init__.py
- migrations
- models.py
- __pycache__
- tests.py
- urls.py
- views.py
- HelloWorld
- _init__.py
- __pycache__
- settings.py
- testdb.py
- urls.py
- view.py
- wsgi.py
- manage.py
- static
- templates
- Hello.html
新建uwsgi.ini文件作为uwsgi的配置文件,内容:
# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=Helloworld
# 指定项目的application
module=HelloWorld.wsgi:application
# 监听的端口号
http=0.0.0.0:8000
# 进程个数
workers=5
#设置pid目录
pidfile=hello.pid
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=hello.log
设置好配置文件后就可以使用uwsgi来启动django项目了
使用如下命令:
uwsgi --ini uwsgi.ini
同样出现类似上面图片情况说明启动成功,使用客户端浏览器输入http://服务器公网IP:8000/hello/应该可以看到对应页面
http://服务器公网IP:8000/hello/
连接uwsgi与Nginx
django与uwsgi的连接完成后接下来就是uwsgi与nginx间的连接了,同样也很简单,cd进入/etc/nginx/conf.d目录,该目录是专门用来存放用户配置文件的
cd /etc/nginx/conf.d
新建uwsgi.conf配置文件,内容如下:
server {
listen 80;
server_name www.sgnilo.cn;
charset utf-8;
client_max_body_size 75M;
location /static {
alias /data/www;
}
location /media {
alias /data/www;
}
location / {
include uwsgi_params;
uwsgi_pass 0.0.0.0:8000;
uwsgi_param UWSGI_CHDIR HelloWorld/HelloWorld;
uwsgi_param UWSGI_SCRIPTS HelloWorld.wsgi;
}
}
这里的uwsgi_pass的路径或端口就是django项目工作的端口或路径
利用Nginx+uwsgi启动Django
接下来应该修改刚刚设置的uwsgi.ini配置文件将其中的http=0.0.0.0:8000更改为socket=0.0.0.0:8000,大致的意思就是uwsgi从自己监听0.0.0.0:8000转变为用socket的方式连接nginx并将请求传送到在0.0.0.0:8000工作的django项目,这里一定要注意的就是socket的地址端口号或路径一定要跟刚刚新建的uwsgi.conf配置文件中的uwsgi_pass后的内容保持一致
# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=Helloworld
# 指定项目的application
module=HelloWorld.wsgi:application
# 监听的端口号
http=0.0.0.0:8000 #更改为socket=0.0.0.0:8000
# 进程个数
workers=5
#设置pid目录
pidfile=hello.pid
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=hello.log
更改完成后重启nginx与uwsgi
nginx -s reload
ps -ef|grep uwsgi
kill -9 进程id
uwsgi --ini uwsgi.ini
完成后三者间的连接工作就算是完成了,可以在客户端浏览器中测试了