Django 无法找到 nginx 提供的静态文件

Django 无法找到 nginx 提供的静态文件

我知道这是一个非常幼稚的问题,但尽管我发现这个问题很简单,却找不到任何解决方案。

我有一个使用 gunicorn 部署的 django 应用程序。静态文件由 nginx 服务器提供,其 URL 如下:myserver.com/static/admin/css/base.css。但是,我的 django 应用程序一直在查找静态文件,myserver.com:8001/static/admin/css/base.css显然失败了(404)。

我不知道如何修复这个问题。这是 Django 还是 nginx 的问题?这是我的 nginx 配置文件:

server {
    server_name myserver.com;

    access_log off;

    location /static/ {
        alias /home/myproject/static/;
    }

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
    }
}

谢谢您的帮助 !

答案1

我不知道为什么你的配置中有这个。它什么也不做。

        proxy_set_header X-Forwarded-Host $server_name;

无论如何,您都没有传递标题Host,这是我能想到的您的 URL 被破坏的最可能的原因。

尝试设置:

        proxy_set_header Host $http_host;

答案2

首先确保你在 settings.py 中已禁用调试

DEBUG = False

检查静态文件路径和 URL(例如)

`STATIC_URL = '/static/'

STATICFILES_DIRS = { “/home/myproject/static/”, }`

在 nginx 中定义你的静态 URL(例如):

location /static/ { alias /home/myproject/static/; expires 1d; }

答案3

不是django的问题,而是nginx代理配置

这个问题与这个非常相似:(我直接粘贴链接,因为它是 serverfault 上的内部链接,不想重复答案)

从 nginx 重定向中删除端口

甚至添加配置也可能proxy_redirect off;会有location效果。

相关内容