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

Nginx looking for a different path than what is given Django static files url setting

我 运行 遇到了一个非常奇怪的问题,我找不到原因。我有一个 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 目录。我应该在哪里寻找可能的原因?

EDIT - 每当在那里进行更改时,我都会重新启动 nginx 服务。所以没有问题。

在您的第一个设置中的任何地方都找不到目录 files。 [我还没有发表评论的特权]。


设置对我来说看起来不错,也许你只是在修改配置文件时忘记重启 Nginx。

参考 link STATIC_ROOT in Django on Server

还有Static Root and Static Url confusion in Django

找到原因了。

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

STATIC_URL = '/静态/'。

较早的一个根据请求在导致我的问题的路径中附加 files