提供 Django 静态文件的 Nginx 必须具有与 URL 同名的文件夹

Nginx serving Django static files must have folder with same name as URL

我正在使用 Nginx 提供静态文件。我的配置如下所示:

# django settings
STATIC_URL = '/static_folder/'
STATIC_ROOT = '/app_data/'

# nginx config
location /static_folder/ {
    root /app_data/;
}

这样不行。我需要更改 STATIC_ROOT 以包含 static_folder 部分。像这样:

# django settings
STATIC_URL = '/static_folder/'
STATIC_ROOT = '/app_data/static_folder/' # <-- here

# nginx config
location /static_folder/ {
    root /app_data/;
}

我希望能够这样服务:

/app_data/logo.png
instead of this:
/app_data/static_folder/logo.png

如果你在 STATIC_URL 中有一个 URL 部分没什么大不了的,但如果我使用嵌套的 URLs,我需要在 STATIC_ROOT 中重复它也。它变得太深了。例如:

# django settings
STATIC_URL = '/static_folder/and/another/folder'
STATIC_ROOT = '/app_data/static_folder/and/another/folder/' 

# nginx config
location /static_folder/ {
    root /app_data/;
}

我怎样才能摆脱这个并在 /app_data/ 中提供文件而不在文件夹结构中包含 static_url 部分。

我猜你的情况应该是 alias,而不是 root:

location /static_folder/ {
    alias /app_data/;
}