python-提供管理静态文件的Django React Nginx

我问一个已经回答过的问题有点尴尬-但是我觉得让节点提供静态文件而不是Django有一个区别点.由webpack捆绑并由node提供的css正常工作,我遇到的问题是使用get_static_prefix装饰器提供admin css和其他两个文件.

文件结构如下:

root
    |
     public
        - templates
        - static
             | <-- collectstatic adding files here
        - vendor
    |
      server
        - app1
        - app2
             | settings.py        

/ etc / nginx / sites-available / project

 server {
     listen xxx.xxx.xxx.xxx:8000;
     server_name xxx.xxx.xxx.xxx;
     location /static {
            alias /root/se/env/public/static/;
    }
}

和settings.py中的设置

STATIC_URL = '/root/se/env/public/static/'
MEDIA_URL = '/media/'
STATIC_ONLY_URL = '/static_only/'

if not DEBUG:
    MEDIA = '/media',STATIC_ROOT = '/root/se/env/public/static/'
    MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR),'public','media')
    STATICFILES_DIRS = '/root/se/env/public/vendor/static/',

我已经转了一圈了.我是Django的新手,并不真正了解它的工作原理.据我了解,STATICFILES_DIRS是collectstatic从中收集静态文件的地方,而STATIC_ROOT是collectstatic运行后转储静态文件的地方.我认为STATIC_URL是我要出问题的地方-但是我没有很多运气来弄清楚它.

就目前而言,当DEBUG = True时,管理员css也无法正常工作,所以我配置错误.结果是:

Not Found: /static/admin/css/base.css
最佳答案
您的位置/静态错误.别名指令在形成路径名时会替换URI的某些部分. location参数和alias参数都应以/结束,或者都不应以/结束:

location /static {
    alias /root/se/env/public/static;
}

要么:

location /static/ {
    alias /root/se/env/public/static/;
}

实际上,由于alias参数以location参数结尾,因此您根本不应使用alias指令.请参阅the alias documentation末尾的注释.

location /static {
    root /root/se/env/public;
}

相关文章

文章浏览阅读3.7k次,点赞2次,收藏5次。Nginx学习笔记一、N...
文章浏览阅读1.7w次,点赞14次,收藏61次。我们在使用容器的...
文章浏览阅读1.4k次。当用户在访问网站的过程中遇到404错误时...
文章浏览阅读2.7k次。docker 和 docker-compose 部署 nginx+...
文章浏览阅读1.3k次。5:再次启动nginx,可以正常启动,可以...
文章浏览阅读3.1w次,点赞105次,收藏182次。高性能:Nginx ...