【问题标题】:Django app + nginx fail to server static filesDjango app + nginx 无法服务器静态文件
【发布时间】:2014-04-08 02:26:54
【问题描述】:

我有一个非常不寻常的问题,我的静态文件都没有加载404 被抛出。需要注意的是,我使用我的生产环境并设置了DEBUG=False,因此静态文件完全由nginx 服务器提供。

settings/production.py

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'
DEBUG = TEMPLATE_DEBUG = False

nginx/sites-enabled/myapp

server {
    listen   80; ## listen for ipv4; this line is default and implied
    server_name myapp.com;
    access_log /var/log/nginx/myapp.log;
    error_log /var/log/nginx/myapp.log;

    root /home/apps/myapp/;

    location / {
            gzip_static on;
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:3031;
    }

    location /static/ { # STATIC_URL
            alias /home/apps/myapp/static/; # STATIC_ROOT
            expires 30d;
    }
    location /media/ { # MEDIA_URL
            alias /home/apps/myapp/media/; # MEDIA_ROOT
            expires 30d;
    }
}

myapp.log

2014/04/08 04:20:11 [error] 22178#0: *590 open() "/home/apps/myapp/staticgrappelli/stylesheets/mueller/grid/output.css" failed (2: No such file or directory), client: 77.89.196.6, server: myapp.com, request: "GET /static/grappelli/stylesheets/mueller/grid/output.css HTTP/1.1", host: "myapp.com", referrer: "http://myapp.com/admin/"
77.89.196.6 - - [08/Apr/2014:04:20:11 +0200] "GET /static/grappelli/stylesheets/mueller/grid/output.css HTTP/1.1" 404 200 "http://myapp.com/admin/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36"

请注意,在此示例中,我的静态根 /home/apps/myapp/static 和应用程序静态文件 grappelli/stylesheets/mueller/grid/output.css 之间缺少 /

有没有人知道为什么会发生这种情况以及如何解决它?

更新(解决方案)

好的,问题是Django's 静态文件默认从www.myapp.com/static/ 文件夹提供,因此没有理由在nginx 配置文件中指定/static/ 文件夹。所以如果其他人有同样的问题,只需从nginx/sites-enabled/myapp文件中删除以下部分:

location /static/ { # STATIC_URL
        alias /home/apps/myapp/static/; # STATIC_ROOT
            expires 30d;
        }
        location /media/ { # MEDIA_URL
            alias /home/apps/myapp/media/; # MEDIA_ROOT
            expires 30d;
        }

【问题讨论】:

  • 澄清一下——myapp.log 是 Nginx 日志文件?
  • 是的,它是nginx 日志文件。不管怎么想,都会发布一个带有解决方案的更新。

标签: python django nginx static


【解决方案1】:

好的,问题是Django's 静态文件默认从www.myapp.com/static/ 文件夹提供,因此没有理由在nginx 配置文件中指定/static/ 文件夹。所以如果其他人有同样的问题,只需从nginx/sites-enabled/myapp文件中删除以下部分:

location /static/ { # STATIC_URL
        alias /home/apps/myapp/static/; # STATIC_ROOT
            expires 30d;
        }
        location /media/ { # MEDIA_URL
            alias /home/apps/myapp/media/; # MEDIA_ROOT
            expires 30d;
        }

【讨论】:

    【解决方案2】:

    您是否在服务器上运行过 python manage.py collectstatic?

    确保文件位于静态根目录中。

    【讨论】:

      猜你喜欢
      • 2016-04-05
      • 2017-12-04
      • 2020-05-18
      • 2018-03-29
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 2018-08-31
      相关资源
      最近更新 更多