问题提出
使用nginx和uwsgi来搭建django项目服务后,发现访问页面时,出现静态资源无法访问的错误net::ERR_ABORTED 404 (Not Found)
原因是访问页面时处理顺序是 nginx->uwsgi->django->uwsgi->nginx,而django中的静态文件在nginx没有配置的情况下是无法访问到的 。
问题解决方案:
1.首先在django的settings文件中修改配置
DEBUG=False #将debug关闭
STATIC_URL = '/static/' # 访问静态资源的前缀
STATIC_ROOT = '/root/var/FogBrain/static/' # 静态资源具体存放路径(nginx配置中需要用到此路径)
# 设置静态文件查找目录,在终端使用命令收集到项目的静态文件后,再去配置nginx服务器寻找静态文件的路径
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
2.使用django manage收集项目静态文件 (需要进入manage.py同级目录下使用命令)
python manage.py collectstatic
3.修改nginx配置文件:
(1)首行use nobody 改为use root
(2) 新增静态资源location配置
user root;
worker_processes 1;
...
#========= uwsgi 集群配置=============#
upstream devapi {
#ip_hash;
server 127.0.0.1:10001;
server 127.0.0.1:10002;
}
server{
listen 8000;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass devapi;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
#新增部分
location /static{
#此地址为上一步setting文件中配置的路径
alias /root/var/FogBrain/static;
}
}