Nginx寻找的路径与给出的Django静态文件url设置不同

时间:2016-12-14 02:26:39

标签: python django nginx uwsgi

我遇到了一个非常奇怪的问题,我无法找到理由。我有一个django应用程序,uWSGI作为我的应用程序服务器,Nginx作为我们的反向代理。我在Django中对静态URL的初始设置如下:

PROJECT_DIR = "/home/ubuntu/src/myapp"

MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(PROJECT_DIR, 'staticfiles')
STATIC_URL = '/staticfiles/'

STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR, 'static'),
)

以及nginx conf中的内容如下:

server {
    listen      80;
    server_name  stg1.myapp.com

    client_max_body_size 5G;   # adjust to taste

    access_log /var/log/nginx/myapp-access.log combined;
    error_log /var/log/nginx/myapp-error.log;

    location /media  {
        alias /home/ubuntu/src/myapp/media/;  # your Django project's media files - amend as required
    }

    location /static {
        alias /home/ubuntu/src/myapp/staticfiles/;
    }
    location / {
        uwsgi_pass  django;
        uwsgi_read_timeout 600s;
        uwsgi_buffering off;
        uwsgi_send_timeout 600s;
        proxy_read_timeout 600s;
        include /home/ubuntu/src/myapp/uwsgi_params;

    }
}

现在,当我尝试访问服务器时,我收到了静态文件的错误:

2016/12/13 20:33:03 [error] 30533#0: *194 open() "/home/ubuntu/src/myapp/staticfiles/files/css/base.css" failed (2: No such file or directory), client: 172.31.4.166, server: stg.myapp.com, request: "GET /staticfiles/css/base.css HTTP/1.1", host: "stg.myapp.com", referrer: "http://stg.myapp.com/profile/user1"

Collectstatic复制了给定STATIC_ROOT位置的所有文件。但实际搜索的路径是 - STATIC_ROOT/files

当我将STATIC_ROOT更改为

STATIC_ROOT = os.path.join(PROJECT_DIR, 'staticfiles/files')

它奏效了。我仍然不知道为什么要查找目录staticfiles/files,而不仅仅是nginx conf中给出的staticfiles目录。我应该在哪里寻找可能的原因?

编辑 - 只要有更改,我就重新启动了nginx服务。那里没有问题。

2 个答案:

答案 0 :(得分:1)

我找到了原因。

STATIC_URL = '/staticfiles/'正在制造问题。它必须是

STATIC_URL ='/ static /'.

较早的一个会在请求路径中附加files,导致我的问题。

答案 1 :(得分:0)

在首次设置中找不到目录文件。 [我还没有权利发表评论]。

<小时/> 设置对我来说很好,也许你只是在修改配置文件时忘记重启Nginx。

请参阅STATIC_ROOT in Django on Server

上的链接

另外Static Root and Static Url confusion in Django