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内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!