准备代码库
关闭Debug
如果Debug被设置为True:
- 所有的数据库查询将被保存在内存中,以django.db.connection.quereis的形式。
- 任何404错误都将呈现在页面中,这个页面将会包含潜在的敏感信息。
- 应用中任何未捕获的异常,从语法错误到数据库错误都会返回在页面中。所以绝对不能公开这个页面。
实现一个404模板
如果将debug改为False,Django会显示一个在模板根目录中名字叫404.html的模板,所以你需要创建这个模板。
404.html
<h1>404</h1>
<h3>
<p>Sorry,nut the requested page could not be found</p>
</h3>
实现500模板
和404一样,500错误是服务器报错。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Page unacaliable</title>
</head>
<body>
<h1>500</h1>
<h1>Page unacaliable</h1>
<p>Sorry,but the requested page is unavaliable
due to a server hiccup</p>
</body>
</html>
设置错误警告
默认情况下,Django在你的代码发生未处理的异常时,将会发送一封Email至开发团队。
- 改变ADMINS设置用来引入你的E-mail地址
ADMINS=(
('westos','westos@qq.com'),
('redhat','redhat@qq.com')
)
- 确保你的服务器配置为发送电子邮件。设置好postfix,sendmail。
设置链接中断警报
#如果连接发生中断
SEND_BROKEN_LINK_EMAILS=True
MANAGERS=(
('westos', 'westos@qq.com'),
('redhat', 'redhat@qq.com'),
)
Django+uwsgi+nginx部署
uWSGI介绍
UWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中的HttpUwsgiModule的作用是与uWSGI读物器进行交换。
WSGI/uwsgi/uWSGI概念区分:
-
WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)而web应用通信的一种规范。
-
uwsgi是一种线路协议而不是通信协议,常用于uWSGI服务器与其他网络服务器的数据通信。
-
uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
uWSGI的主要特点: -
超快的性能
-
低内存占用
-
多app管理
-
详尽的日志功能
-
高度可定制
Nginx
Ningx是一个反向代理服务器
反响代理,部署在Web服务器上,代理所有外部网络对内部网络的访问。浏览器访问服务器,必须经过这个代理,是被动的。正向代理的主动方是客户端,反响代理的主动方是Web服务器。
正向代理,浏览器主动请求代理服务器,代理服务器发送请求到对应的目标服务器。
反响代理的作用 -
安全,防止外部程序对Web服务器的直接攻击。
-
负载均衡。可以根据Web服务器的负载情况,动态的把HTTP请求交给不同的Web服务器来处理。
-
提升Web服务器的IO性能。如果一个HTTP请求的数据直接传给Web服务器,传输需要几秒,Web服务器就会阻塞几秒,来接收IO,这样会降低web服务器性能。如果使用反向代理服务器,先让反向代理服务器接收完整个HTTP请求,在把请求发给Web服务器。
WSGI协议
一个网站一般有很多不同的请求,在这些请求中基本1,2,4,5部都是固定的,变得是第三步,所以把这四步抽象出来让开发者只关注第三步,这样就能提高来法效率。用于处理Web服务器和应用程序的交互信息。
部署原理框图
安装
安装nginx
sudo yum install python-devel nginx
安装uwsgi
pip install uwsgi
创建一个uwsgi.ini
配置
[uwsgi]
#配置服务器的监听ip和端口,让uWSGI作为nginx的支持服务器的话,设置socket
#如果要让uWSGI作为单独的web-server,用http
#http=127.0.0.1:3309
socket=127.0.0.1:3309
#配置项目目录(设置为项目的根目录)
chdir=/home/kiosk/Desktop/DjangoPro
#配置入口模块即wsgi.py
wsgi-file=DjangoPro/wsgi.py
#开启master,将会多开一个管理进程,管理其他服务进程
master=True
#服务器开启的进程数量
processes=2
#以守护进程方式提供服务,输出信息将会打印到log中
daemonize=wsgi.log
#服务器进程开启的线程数量
threads=4
#退出时候清空环境变量
vacuum=True
#进程pid
pidfile=uwsgi.pid
#配uWSGI搜索静态文件目录(即django项目下存放static文件
#的目录用uWSGI作为单独服务器时才需要设置,此时我们是用nginx处理静态文件)
check-static=/home/kiosk/Desktop/DjangoPro/staticuw
nginx配置
server {
listen 8080;
server_name localhost;
charset utf-8;
access_log off;
location /static {
alias /home/kiosk/Desktop/DjangoPro/DjangpPro/all_static/;
}
location / {
include /usr/local/nginx/conf/uwsgi_params; #设置将所有请求转发给uwsgi服务处理
uwsgi_pass 127.0.0.1:3309; #指定uwsgi的url
}
进入项目目录启动uwsgi
uwsgi --ini uwsgi.ini
启动nginx服务
/usr/local/nginx/sbin/nginx