- WSGI (Web Server Gateway Interface)Web服务器网关接口,是Python应用程序或框架和Web服务器之间的一种接口,被广泛使用
- 它实现了WSGI协议、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。WSGI是一种Web服务器网关接口。
uWSGI 网关接口配置 (ubuntu 18.04 配置)
python manage.py runserver
通常只在开发和测试环境中使用。当开发结束后,完善的项目代码需要在一个高效稳定的环境中运行,这时可以使用uWSGI。uWSGI是WSGI的一种,它可以让Django、Flask等开发的web站点运行其中.
-
安装uWSGI
在线安装 uwsgi
$ sudo pip3 install uwsgi
-
离线安装
下载安装包:
$ pip3 download uwsgi
下载后的文件为uwsgi-2.0.18.tar.gz
离线安装$ tar -xzvf uwsgi-2.0.18.tar.gz $ cd uwsgi-2.0.18 $ sudo python3 setup.py install
-
配置uWSGI
- 添加配置文件
项目文件夹/uwsgi.ini
[uwsgi] # 套接字方式的 IP地址:端口号 # socket=127.0.0.1:8000 # Http通信方式的 IP地址:端口号 http=127.0.0.1:8000 # 项目当前工作目录 chdir=/home/tarena/.../my_project 这里需要换为项目文件夹的绝对路径 # 项目中wsgi.py文件的目录,相对于当前工作目录 wsgi-file=my_project/wsgi.py # 进程个数 process=4 # 每个进程的线程个数 threads=2 # 服务的pid记录文件 pidfile=uwsgi.pid # 服务的目志文件位置 daemonize=uwsgi.log
- 修改
settings.py
将DEBUG=True
改为DEBUG=False
- 修改
settings.py
将ALLOWED_HOSTS = []
改为ALLOWED_HOSTS = ['*']
- 添加配置文件
-
uWSGI的运行管理
- 启动 uwsgi
$ cd 项目文件夹 $ sudo uwsgi --ini 项目文件夹/uwsgi.ini
- 停止 uwsgi
$ cd 项目文件夹 $ sudo uwsgi --stop uwsgi.pid
- 说明:
当uwsgi 启动后,当前django项目的程序已变成后台守护进程,在关闭当前终端时此进程也不会停止。
- 启动 uwsgi
nginx 反向代理配置
Nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理、负载均衡、缓存等一系列重要特性,在实践之中使用广泛。由C语言编写,执行效率高。
-
原理:
客户端请求nginx,再由nginx 请求 uwsgi, 运行django下的python代码 -
ubuntu 下 nginx 安装
$ sudo apt install nginx
-
nginx 配置
修改nginx 的配置文件/etc/nginx/sites-available/default
# 在server节点下添加新的location项,指向uwsgi的ip与端口。 server { ... location / { uwsgi_pass 127.0.0.1:8000; # 重定向到127.0.0.1的8000端口 include /etc/nginx/uwsgi_params; # 将所有的参数转到uwsgi下 } ... }
-
nginx服务控制
$ sudo /etc/init.d/nginx start|stop|restart|status # 或 $ sudo service nginx start|stop|restart|status
通过
start
,stop
,restart
,status
可能实现nginx服务的启动、停止、重启、查扑克状态等操作 -
修改uWSGI配置
修改项目文件夹/uwsgi.ini
下的Http通信方式改为socket
通信方式,如:[uwsgi] # 去掉如下 # http=127.0.0.1:8000 # 改为 socket=127.0.0.1:8000
-
重启uWSGI服务
$ sudo uwsgi --stop uwsgi.pid $ sudo uwsgi --ini 项目文件夹/uwsgi.ini
nginx 配置静态文件路径
-
解决静态资源路径问题
# file : /etc/nginx/sites-available/default # 新添加location /static 路由配置,重定向到指定的绝对路径 server { ... location /static { # root static文件夹所在的绝对路径,如: ; # 重定向/static请求的路径,这里改为你项目的文件夹 } ... }
-
修改配置文件后需要
重新启动
nginx 服务
404 界面
在模板文件夹内添加名为 404.html
的模版,当视图触发Http404
异常时将会被显示
404.html
仅在发布版中(即setting.py
中的 DEBUG=False
时) 才起作用
当相应的处理函数触发Http404
异常时就会跳转到404界面
from django.http import Http404
def xxx_view(request):
raise Http404 # 直接返回404