Джанго | Статические файлы, обслуживаемые nginx, не используются Клиентом - PullRequest
0 голосов
/ 18 января 2019

У меня есть приложение django со следующими настройками для статических файлов:

STATIC_DIR = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = [STATIC_DIR,]
STATIC_ROOT = '/opt/static/'

Я запускаю Django, используя следующую команду gunicorn: gunicorn evee.wsgi -b 0.0.0.0:8000.

Я настроил nginx для обслуживания статических файлов и ssl, используя следующую команду conf:

  server {
    keepalive_timeout 5;
    listen 443 ssl;
    server_name api.home.com;
    client_max_body_size 4G;
    error_page 500 502 503 504 /500.html;

    # path for static files
    root /opt;

    location / {
      # checks for static file, if not found proxy to app
      try_files $uri @proxy_to_app;
    }

    location @proxy_to_app {
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Ssl off;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Port 80;
      proxy_set_header X-Forwarded-Proto $scheme;
      # we don't want nginx trying to do something clever with
      # redirects, we set the Host: header above already.
      proxy_redirect off;
      proxy_pass http://evee:8000;
    }
  }

Интересно то, что я могу видеть CSS в клиенте. Например, запрос к https://secapi.ril.com/static/admin/css/base.css успешен и возвращает ответ 200. Я могу просмотреть все статические файлы по указанному URL, но, похоже, django их не использует. Пробовал менять клиентов, а также частный режим.

Я что-то делаю ужасно неправильно? Это работало в прошлый раз, когда я проверял.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Вот как я это решил. Пришлось отредактировать файл nginx.conf, чтобы сконфигурировать апстрим вместо того, чтобы перенаправлять его на http напрямую, и удалить несколько устанавливаемых заголовков. Понятия не имею, насколько он отличается или почему это работает. Вся настройка выполняется в Docker Swarm.

#### SECAPI #####
  upstream app_server {
    # for a TCP configuration
    server evee:8000 fail_timeout=0;
  }

  server {
    keepalive_timeout 5;
    listen 443 ssl;
    server_name api.home.com;
    client_max_body_size 4G;
    error_page 500 502 503 504 /500.html;

    # path for static files
    root /opt;

    location / {
      # checks for static file, if not found proxy to app
      try_files $uri @proxy_to_app;
    }
    location @proxy_to_app {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header Host $http_host;
      # we don't want nginx trying to do something clever with
      # redirects, we set the Host: header above already.
      proxy_redirect off;
      proxy_pass http://app_server;
    }

  }

0 голосов
/ 18 января 2019

Попробуйте добавить путь к статическим файлам в файлы конфигурации nginx как:

location /static/ {
    alias   /opt/static/;
}

Здесь указан полный путь к вашей статической папке. Я думаю, в вашем случае это /opt/static/

...