Прокси Django, gunicorn и nginx: статические файлы дают 404

Я разрабатываю проект django через gunicorn на своей локальной машине. По причинам™ я хочу настроить для него nginx в качестве прокси. Все идет нормально:

location /intranet {
    return 301 /intranet/;
}

location /intranet/ {
    rewrite ^/intranet(.*) /$1 break; 
    proxy_redirect default;
    proxy_pass http://127.0.0.1:8000;
}

Это хорошо помогает. Однако ни один из статических файлов не разорван: все, что я получаю, это 404 для них.

Как изменить приведенную выше конфигурацию nginx, чтобы статическое содержимое было отделено?

Обратите внимание, что при использовании https::127.0.0.1:8000 статические файлы обслуживаются нормально.


person Sardathrion - against SE abuse    schedule 26.05.2017    source источник


Ответы (1)


В проекте вы должны указать URL:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

Если у вас есть статическая папка в каждом приложении, вы можете использовать:

python manage.py collectstatic

Это захватит все ваши статические файлы и поместит их в одну и ту же статическую папку (STATIC_ROOT).

Тогда ваш Ngnix также должен знать, где хранятся statifiles

server {
    access_log /pathto/log/acces.log;
    error_log  /pathto/log/error.log;
    server_name ******
    charset     utf-8;

    location /static {
        alias /path/to/your/static; <---- This Line
    }

    location /intranet/ {
        rewrite ^/intranet(.*) /$1 break; 
        proxy_redirect default;
        proxy_pass http://127.0.0.1:8000;
    }
}
person Zartch    schedule 26.05.2017
comment
Я получаю 403 Forbidden… Несмотря на то, что каталог принадлежит (группе) nginx и для него установлены разрешения httpd_sys_content_t:s0 для selinux. Идеи? - person Sardathrion - against SE abuse; 26.05.2017
comment
Зависит от вашего желания иметь безопасную статическую папку. Прежде всего установите все разрешения, чтобы проверить, работает ли это: chmod 777 static, если это работает, вы можете бороться с группами и разрешениями. :П - person Zartch; 26.05.2017
comment
chmod 777 это плохая идея™ и в любом случае не поможет. - person Sardathrion - against SE abuse; 26.05.2017
comment
Обычно вы используете 755, но для отладки, если он работает, это неплохая идея. Убедитесь, что работает, если работает вопрос о разрешениях, это относится к ошибке сервера - person Zartch; 26.05.2017