Nginx, обслуживающий статические файлы Django, должен иметь папку с тем же именем, что и 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

Это не имеет большого значения, если у вас есть одна часть URL-адреса в STATIC_URL, но если я использую вложенные URL-адреса, мне нужно повторить это и в 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 в структуру папок.


person Hemen    schedule 31.03.2021    source источник
comment
Какую ошибку вы получаете с первым кодом? 404?   -  person onyeka    schedule 31.03.2021
comment
Да, я получаю код ошибки 404.   -  person Hemen    schedule 31.03.2021
comment
На самом деле, поскольку вы хотите, чтобы конечный результат был app_data/file.txt, не должно ли местоположение STATIC_URL и nginx также быть «app_data»?   -  person onyeka    schedule 31.03.2021


Ответы (1)


Я думаю, в вашем случае это должно быть alias, а не root:

location /static_folder/ {
    alias /app_data/;
}
person Ivan Starostin    schedule 01.04.2021