代码之家  ›  专栏  ›  技术社区  ›  BeeNag

用户上传nginx和docker

  •  0
  • BeeNag  · 技术社区  · 6 年前

    我有一个 Django 应用程序,用户可以上载包含他们希望在应用程序中显示的数据的文件。应用程序使用docker进行容器化。在生产中,我试图配置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
    

    执行操作时。

    我还希望媒体文件被持久化,以便它们位于docker卷中。

    我怀疑第一条日志消息可能是罪魁祸首,但是否有办法防止这种情况发生,或者只是我的一端连接不良?

    这是我的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 为真,它工作得很好,但只有当DEBUG设置为false时才会发生这种情况。

    0 回复  |  直到 6 年前
    推荐文章