通过 Nginx 404 提供 Django 静态文件

通过 Nginx 404 提供 Django 静态文件

我使用 uwsgi 在 Nginx 上托管我的 Django 项目。静态文件需要由 Nginx 单独提供

server { 
    listen 80; 
    server_name blog.foo.de; 

    location /static { 
        root /home/user/blog/staticfiles; 
        access_log   off; 
        expires      30d; 
    } 

    location / {
       include uwsgi_params;
       uwsgi_pass unix:/tmp/blog.socket;
    }

    access_log      /var/log/nginx/blog.access.log combined;
    error_log       /var/log/nginx/blog.error.log warn;
}

我的 STATIC_URL 设置为http://blog.foo.de/static/ 文件夹 /home/user/blog/staticfiles 包含一个文件夹 static,文件收集到其中。因此,根据此处的其他帖子,一切都应该正常工作 -但事实并非如此。uwsgi 部分运行良好,但我只得到了404当我尝试访问静态文件时。

答案1

这需要进行一些常规清理:

  • 您的server区块有两个location /区块,这是不允许的;其中一个区块将被忽略。location任何给定位置只能使用一个区块。
  • 您的server块未定义root。请确保仅在块中定义,而不在块中root定义(除非位置需要不同的根)。serverlocation

我还建议在调试时不要转动offaccess_log使用expires,因为这会使隔离问题的原因变得更加困难。


但要真正解决这个问题,可以考虑完全重写它。一个非常简短的例子:

server {
    location @django {
        include uwsgi_params; 
        uwsgi_pass unix:/tmp/blog.socket; 
    }

    location / {
        try_files $uri $uri/ @django;
    }
}

答案2

将此代码用于您的静态文件位置

location ^~ /static/ {
    alias  /home/user/blog/staticfiles;
}

此链接可能有助于您了解更多详细信息-https://stackoverflow.com/questions/23226357/django-nginx-static-files-404

相关内容