django+nginx 部署未正确加载静态文件
Posted
技术标签:
【中文标题】django+nginx 部署未正确加载静态文件【英文标题】:django+nginx deployment not loading static files correctly 【发布时间】:2017-12-06 19:13:48 【问题描述】: server
listen 80;
server_name 13.xx.xx.xxx;
location = /favicon.ico access_log off; log_not_found off;
location /static/
root /home/ubuntu/studykarma/django-react-redux-base/src/;
location /
include proxy_params;
include /etc/nginx/mime.types;
proxy_pass http://unix:/home/ubuntu/studykarma/django-react-redux-base/src/djangoreactredux.sock;
我的 nginx 配置文件
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static_root')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static_dist'),
)
我的设置.py
我的静态文件在 static_dist 文件夹中,我的 reactjs 代码在静态中 文件夹。
我的静态文件没有加载并给我 404, 如果我将路径更改为 /static_dist/ 那么我也会得到空内容。
我正在使用这个模板:https://github.com/Seedstars/django-react-redux-base
【问题讨论】:
我希望location /static/
与您的设置中的 STATIC_ROOT
相同。您是否运行collectstatic
将文件复制到静态根目录?
【参考方案1】:
关于 Nginx 配置
location /static/
root /home/ubuntu/studykarma/django-react-redux-base/src/;
这个配置告诉Nginx,在通过example.com/static/app.js访问时,查看src
文件夹root
中的app.js文件,如果你想要static_dist
,那么配置更改将是
location /static/
root /home/ubuntu/studykarma/django-react-redux-base/src/path/to/static_dist/;
关于 Django 配置
你的 Django 设置在逻辑上是错误的,
STATIC_ROOT = os.path.join(BASE_DIR, 'static_root')
上面的设置告诉django你希望你的所有静态文件从STATICFILES_DIRS
到STATIC_ROOT
,当你使用collectstatic
django管理命令时,配置是有效的/被django使用,这实际上是从@987654330复制你的所有文件@ 到 STATIC_ROOT
( 但这也意味着,您必须将 /static/
位置 nginx 配置指向 static_root
而不是 static_dist
。
【讨论】:
我跑了collectstatic
和 static_root
文件夹已创建,我将 location
块修改为 location /static/ root /home/ubuntu/studykarma/django-react-redux-base/src/static_root/;
但仍然得到 404
location /static_root/ root /home/ubuntu/studykarma/django-react-redux-base/src/static_root/;
这个对我有用【参考方案2】:
使用这个,
location /static_root/ root /home/ubuntu/studykarma/django-react-redux-base/src/static_root/;
会有用的
【讨论】:
以上是关于django+nginx 部署未正确加载静态文件的主要内容,如果未能解决你的问题,请参考以下文章
nginx,uwsgi,部署django,静态文件不生效问题