Пользователь загружает с помощью nginx и docker - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть приложение Django, где пользователи могут загружать файлы, содержащие данные, которые они хотят отобразить в приложении. Приложение упаковано с помощью докера. На производстве я пытаюсь настроить nginx, чтобы он работал, и, насколько я могу судить, он работает в некоторой степени.

Насколько я могу судить, файл действительно загружен, поскольку я вижу его в контейнере, и я также могу загрузить его из приложения. Проблема, с которой я сталкиваюсь, заключается в том, что после отправки формы она должна перенаправляться в другую форму, где пользователь может назначить материал для данных в приложении (на самом деле это не имеет отношения к вопросу). Однако вместо этого я получаю ошибку 500.

Я посмотрел журналы ошибок nginx и вижу:

[info] 8#8: *11 client closed connection while waiting for request, client: 192.168.0.1, server: 0.0.0.0:443

и

[info] 8#8: *14 client timed out (110: Operation timed out) while waiting for request, client: 192.168.0.1, server: 0.0.0.0:443

при выполнении операции.

Я также хочу, чтобы файлы мультимедиа были сохранены, чтобы они находились в томе докера.

Я подозреваю, что первое сообщение журнала может быть виновником, но есть ли способ предотвратить это, или это просто плохое соединение на моем конце?

Вот мой конф nginx:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log debug;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

http {

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    proxy_headers_hash_bucket_size  52;

    client_body_buffer_size 1M;
    client_max_body_size 10M;

    gzip  on;

    upstream app {
        server django:5000;
    }

    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name dali.vpt.co.uk;

        location / {
            return 301 https://$server_name$request_uri;
        }
    }

    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name dali.vpt.co.uk;

        ssl_certificate /etc/nginx/ssl/cert.crt;
        ssl_certificate_key /etc/nginx/ssl/cert.key;

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

        # cookiecutter-django app
        location @proxy_to_app {
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Url-Scheme $scheme;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;

            proxy_pass   http://app;
        }

        location /media/ {
            autoindex on;
            alias /app/tdabc/media/;
        }

    }

}

и вот мой файл docker-compose:

version: '2'

volumes:
  production_postgres_data: {}
  production_postgres_backups: {}
  production_media: {}

services:
  django: &django
    build:
      context: .
      dockerfile: ./compose/production/django/Dockerfile
    image: production_django:0.0.1
    depends_on:
      - postgres
      - redis
    volumes:
      - .:/app
      - production_media:/app/tdabc/media
    env_file:
      - ./.envs/.production/.django
      - ./.envs/.production/.postgres
    command: /start.sh

  postgres:
    build:
      context: .
      dockerfile: ./compose/production/postgres/Dockerfile
    image: production_postgres:0.0.1
    volumes:
      - production_postgres_data:/var/lib/postgresql/data
      - production_postgres_backups:/backups
    env_file:
      - ./.envs/.production/.postgres

  nginx:
    build:
      context: .
      dockerfile: ./compose/production/nginx/Dockerfile
    image: production_nginx:0.0.1
    depends_on:
      - django
    volumes:
        - production_media:/app/tdabc/media
    ports:
      - "0.0.0.0:80:80"
      - "0.0.0.0:443:443"

Любая помощь или понимание этой проблемы будет высоко ценится.

Спасибо за ваше время.

Обновление Еще одна вещь, которую я должен упомянуть, это то, что когда я запускаю приложение с моими производственными настройками, но для DEBUG установлено значение True, оно работает отлично, но это происходит только тогда, когда для DEBUG установлено значение false.

...