Ошибка восходящего потока Nginx при попытке загрузки из кеша с использованием Django - PullRequest
0 голосов
/ 10 января 2019

У меня есть веб-приложение, в котором одной из функций является загрузка файла в определенную систему. Файл загружается в удаленный API Django через вызов Ajax с использованием модуля requests python.

Это работает нормально, когда я запускаю приложение локально, но когда я запускаю его через Nginx, я всегда получаю следующую ошибку при попытке загрузить файл


    [error] 22665#0: *254004 upstream prematurely closed connection while reading response header from upstream, 
    client: xxx.xxx.xx.xx, server: redacted.com,
    request: "POST /report/ajax/upload_file/ HTTP/2.0",
    upstream: "http://unix:/var/www/webapp.sock:/report/ajax/upload_file/",
    host: "redacted.com",
    referrer: "https://redacted.com/report/key/sha256/"

И 502 ошибка в инструментах разработчика

    POST https://redacted.com/report/ajax/upload_file/ 502

Код на стороне клиента, который делает вызов ajax:


    function handleUploadButton() {
        $('#upload-button').on('click', function() {
            var data = new FormData();
            var file = $('form input[type=file]')[0].files[0];
            data.append('file',file);
            data.append('sha256', sha256);
            data.append('api_key', 'key');
            console.log(file);
            $.ajax({
                url: '/report/ajax/upload_file/',
                data: data,
                processData: false,
                contentType: false,
                type: 'POST',
                success: function(data) {
                    $('#sandboxMessage').text(data.res);
                    $('#uploadResults').slideDown(300);
                },  
                error: function(data) {
                    $('#customMessage').text('Sample upload failed');
                    $('#uploadResults').slideDown(300);
                },  
            }); 
        }); 
    }

И код Python на стороне сервера


    def upload_file(request):
        sha256 = request.POST.get('sha256', None)
        api_key = request.POST.get('api_key', None)
        uploadFile = request.FILES['file']
        headers = {'X-TOKEN-KEY': api_key}
        res = requests.put(url='https://redacted.com/v1-1/file/'
                + sha256, headers=headers, data=uploadFile)
        data = { 
                'sha256': sha256,
                'api_key': api_key,
                'res': json.loads(res.content)['message']
                }   
        return JsonResponse(data)

И, наконец, моя конфигурация Nginx выглядит следующим образом


    server {
            listen      80 default_server;
            listen [::]:80 default_server;
            server_name redacted.com www.redacted.com;
            rewrite     ^   https://$server_name$request_uri? permanent;
    }

    server {
            listen 443 ssl http2;
            # Use only TLS
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            server_name redacted.com;

            location /static/ {
                root /var/www/redacted/;
            }
            location / {
                    proxy_set_header Host $http_host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header X-Forwarded-Proto $scheme;
                    proxy_pass http://unix:/var/www/redacted.sock$args;
            }

            # cert
            ssl_prefer_server_ciphers on;
            ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
            #Enable OCSP stapling
            ssl_stapling on;
            ssl_stapling_verify on;
            ssl_session_cache shared:ssl:40m;
            ssl_session_timeout 4h;
            # Enable session tickets
            ssl_session_tickets on;


            ssl_certificate /etc/ssl/ssl-bundle.crt;
            ssl_certificate_key /etc/ssl/redacted.key;

    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...