Невозможно передать django stati c файлов с помощью сервера uwsgi на обратный прокси nginx - PullRequest
0 голосов
/ 17 апреля 2020

Я использую uwsgi в качестве сервера и nginx в качестве обратного прокси-сервера для запуска проекта django.

Структура проекта выглядит следующим образом (здесь я перечислил только необходимые папки / файлы):

war
├── katana
│   ├── wapps
│   │   ├── app1
│   │   └── app2
│   └── wui
│       ├── settings.py
│       └── wsgi.py
└── static
    ├── css
    │   └── test.css
    ├── img
    │   └── test.img
    └── js
        └── test.js

Конфигурация stati c в файле settings.py выглядит следующим образом:

STATIC_URL = '/static/'
STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static')
    ]
DATA_UPLOAD_MAX_MEMORY_SIZE = 10242880
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')

Файл wsgi.py выглядит следующим образом:

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "katana.wui.settings")

application = get_wsgi_application()

uwsgi - сервер запущен с использованием: uwsgi -b 65535 --socket :4000 --workers 100 --cpu-affinity 1 --module katana.wui.wsgi --py-autoreload 1

Conf nginx выглядит следующим образом:

events {
  worker_connections  1024;  ## Default: 1024
}

http {
    include     conf/mime.types;

    # the upstream component nginx needs to connect to
    upstream uwsgi {
        server backend:4000; # for a web port socket (we'll use this first)
    }

    # configuration of the server
    server {
        # the port your site will be served on
        listen      8443 ssl http2 default_server;

        # the domain name it will serve for
        server_name _; # substitute your machine's IP address or FQDN
        charset     utf-8;

        ssl_certificate     /secrets/server.crt;
        ssl_certificate_key /secrets/server.key;
        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;
        add_header Strict-Transport-Security "max-age=31536000" always;

        # Redirect HTTP to HTTPS
        error_page 497 https://$http_host$request_uri;

        # max upload size
        client_max_body_size 75M;   # adjust to taste
        uwsgi_read_timeout 600s;

        # Finally, send all non-media requests to the Django server.
        location / {
            uwsgi_pass  uwsgi;
            include     /config/uwsgi_params; # the uwsgi_params file you installed
        }
    }
}

Развертывание проекта успешно, но содержимое c stati (css) js, img) не загружаются. Ошибка в консоли браузера:

GET https://<ip>/static/css/test.css net::ERR_ABORTED 404

Примечание. Я хочу, чтобы сервер uwsgi обслуживал файлы stati c и nginx в качестве обратного прокси-сервера. Если nginx настроен для обслуживания stati c файлов, он может это сделать, но я хочу, чтобы эта функция была реализована с помощью сервера uwsgi.

1 Ответ

1 голос
/ 17 апреля 2020

Django не обслуживает stati c файлов в процессе производства, вам нужно добавить для них дополнительное nginx местоположение

location /static {
        alias   /path/to/your/static/;
    }

Я бы посоветовал не выполнять следующие действия, так как вы уже используете прокси с nginx нет никакого смысла в том, чтобы uwsgi обрабатывал их (вы получаете немного больше нагрузки таким образом, поскольку они должны быть проксированы обратно)

Если вы все еще хотите go этот путь uwsgi staticfile документы

...