1、概念:
Nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理、负载均衡等一系列重要的特性。由C语言编写,执行效率高。
- 作用:
负载均衡,多台服务器轮流处理请求。
反向代理(nginx接到请求之后,可以把这个请求转发给后边的若干uWSGI,再给运行着Django的机器)
- 原理:客户端请求nginx,再由nginx将请求转发给uWSGI,再给Django。
2.安装:sudo apt install nginx
,这是系统级的组件,所以要拿apt来装,安装完毕之后,可以输入nginx -v
查看。
3.配置:
1.修改nginx的配置文件: /etc/nginx/sites-enables/default , sudo vim该文件.
#在server节点下添加新的location项,指向uwsgi的ip和端口。
server {
...
location / {
#禁掉try_files
uwsgi_pass 127.0.0.1:8000; #重定向到127.0.0.1的8000端口(所有/ 开头的请求,都用uwsgi的协议转发给127.0.0.1:8000)
include /etc/nginx/uwsgi_params; #将所有的参数转到uwsgi下
}
}
2.改完之后就重启nginx:
sudo /etc/init.d/nginx restart
.
用到的命令有:sudo /etc/init.d/nginx start|stop|restart|status或者sudo service nginx start|stop|restart|status
注意:nginx配置只要修改,就需要重启,否则配置不生效。sudo nginx -t 可以检查修改之后语法有没有问题。
3.修改uWSGI配置:
说明nginx负责接收请求,并把请求转发给后面的uWSGI,此模式下,uWSGI需要以socket模式启动,修改项目同名目录下的uwsgi.ini文件。
[uwsgi]
socket=127.0.0.1:8000 #把http=127.0.0.1:8000注释掉
改完之后,再重启uWSGI(cd到能看见uwsgi.ini的那个文件夹,再输入命令。uWSgi开着的话就先停掉,sudo uwsgi --stop uwsgi.pid
,停下之后一定要ps aux|grep 'uwsgi'
检查一下,是不是停止成功。再启动sudo uwsgi --ini uwsgi.ini
,启动之后也ps aux|grep 'uwsgi'
检查是否启动启动成功)
nginx监听的是80,uWSGI监听的是8000,那么测试效果时,浏览器中输入的地址端口号应该是80,因为默认的就是80,所以可以直接访问127.0.0.1开头的地址,例如127.0.0.1/test_upload或者127.0.0.1:80/test_upload.
4.常见问题:(如果涉及到权限较高的很多操作,可以先sudo su
进入超级用户,后边就能正常使用命令了)
1.排查错误时可以看日志:
1.nginx日志位置:
异常信息 /var/log/nginx/error.log ;
正常信息 /var/log/nginx/access.log
2.uwsgi日志文件:在项目同名目录下,uwsgi.log
2.访问127.0.0.1:80 地址,出现502响应:
502响应表示nginx反向代理配置成功,但是对应的uWSGI未启动,解决方法就是cd到uwsgi.ini在的那个文件夹,uwsgi --ini uwsgi.ini
启动
3.访问127.0.0.1:80/url 出现404响应:有两种情况:
1.如果是一个很“django”的黄色报错页,估计就是写的路由错了,当前的这个路由没在django中配置。
2.也可能是nginx配置错误,没有禁掉try_files。
5.nginx静态文件配置:
- 创建新路径:主要存在Django的所有静态文件,如:/home/tarena/项目名_static/
- 在Django的settings.py中添加新配置:
STATIC_ROOT='/home/tarena/项目名_static/static
; STATIC_ROOT是正式上线之后,静态文件的存储目录 ; 防止路径拼错,可以使用pwd命令看一下,直接复制。 - 进入项目目录后,执行
python manage.py collectstatic
(只要有静态文件的添加,就要执行这条命令), 执行该命令后,Django将项目中所有静态文件复制到STATIC_ROOT中,包括Django内建的静态文件。 - 静态文件收集好之后,得告诉nginx什么样的请求是静态资源请求,以及这个请求来了之后,nginx该去怎么处理:
在nginx配置中添加新的配置:修改 /etc/nginx/sites-enabled/default,(sudo vim,否则权限不够。)新添加location /static 路由配置,重定向到指定的 第一步创建的路径即可。
server {
...
location /static {
#root 第一步创建的文件夹的绝对路径,如:
root /home/tarena/项目名_static;
}
}
添加location没有顺序要求.
添加完之后记得保存退出,Esc->:wq->回车 ,然后重启nginx,使用命令sudo /etc/init.d/nginx restart
。
6.404/500页面:
在模板文件中添加404.html模板,当视图触发Http404异常时将会被显示。404.html仅在发布版中(即settings.py中的DEBUG=False时)才起作用。
当响应处理函数触发Http404异常时就会跳转到404界面。
7.邮箱告警:
1.当正式服务器上代码运行有报错时,可以将错误追溯信息发送至指定的邮箱:
在settings.py中 —— 在基础邮箱授权后,添加如下配置:
# 关闭调试模式
DEBUG = False
# 错误报告接收方
ADMINS = [('xxx', 'xxxxxxx@example.com'), ('yyy', 'yyyyyyy@example.com')]
# 发送错误报告方,默认为root@localhost账户,多数邮件服务器会拒绝,所以改成email配置中的邮箱,也就是授权的那个邮箱
SERVER_EMAIL = 'email配置中的邮箱'
2.django可以把报错邮件中的敏感信息用*过滤掉:
1.过滤局部变量:使用sensitive_variables()装饰器(多个装饰器时得放在最上边)
from django.views.decorators.debug import sensitive_variables
@sensitive_variables('user', 'pw', 'cc') # 参数就是想过滤掉的数据的变量名
def process_info(user):
pw = user.pass_word
cc = user.credit_card_number
name = user.name
...
2.过滤POST数据:
from django.views.decorators.debug import sensitive_post_parameters
@sensitive_post_parameters('password', 'username')
def index(request):
s = request.POST['username'] + request.POST['abcd']
# 'abcd' 并不存在,此时会引发error,POST中的username和password的值就会被替换为 ****
到此这篇关于django8.5 项目部署——Nginx的文章就介绍到这了,更多相关django项目部署Nginx内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!