Nginx托管静态文件时,Django管理站点无法加载静态文件(CSS / JS)

时间:2020-05-28 10:22:30

标签: python django nginx django-urls

Django 2.2版

Python 3.6.9

Ubuntu 18.04.4

在Nginx托管静态文件时,Django管理站点无法加载静态文件(CSS / JS)

在开发中,我将静态文件放入my_project/static/,在生产中,我进行了python manage.py collectstatic。所有静态文件都收集在/srv/my_site_static/中。文件夹/srv/my_site_static/admin包含4个用于django管理站点的 js,img,fonts,css 文件夹。

我使用Nginx托管静态文件。我编写的应用程序使用下面的Nginx设置正确加载了静态文件。唯一的问题是我的 http://my_site.com/admin 无法加载 css / js

Django settings.py

    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'ckeditor',                        # for blog, articles, html pages
    'ckeditor_uploader',                        # for blog, articles, html pages
    'user_blog',
    'product_info',                     # product info page
]

STATIC_URL = 'static/'
MEDIA_URL = 'media/'



# Use these in production mode
STATIC_ROOT = '/srv/my_site_static/'
MEDIA_ROOT = '/srv/my_site_media/'


STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

我的nginx设置:

server {                                                                                                                                                      
        listen 9000;                  # nginx public server                                                                                                                        

        server_name 127.0.0.1;                                                                                                                                

        location /static/ {                                                                                                                                  
                autoindex on;                                                                                                                                
                alias /srv/my_site_static/; # Set this to your STATIC_ROOT                                                                                  
        }                                                                                                                                                    


        location /media/ {                                                                                                                                    
                autoindex on;                                                                                                                                
                alias /srv/my_site_media/; # Set this to your MEDIA_ROOT                                                                                    
        }

        location / {                                                                                                                                          
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                                                                                  
                proxy_set_header Host $http_host;                                                                                                            
                proxy_redirect off;                                                                                                                          
                proxy_pass http://127.0.0.1:8000;    # the django server                                                                                                          
        }                                                                                                                                                    
}

在这里,我的Nginx不在乎对 my_site.com/admin/xxxxxxxx 的请求,因此我会将它们全部传递给Django服务器。 Django表示找不到文件http://my_site.com/admin/login/static/admin/css/base.css(这是来自django admin的登录页面)。但是使用我的Nginx,可以找到文件http://my_site.com/static/admin/css/base.css ...在管理站点的settings.py中应该在哪里更改?

如何正确加载管理站点静态文件?使用Nginx还是Django服务器?

感谢您的帮助!

0 个答案:

没有答案