Uploads de arquivos Nginx, para onde foram os arquivos?

1

Estou tentando configurar o nginx para suportar uploads de arquivos. Estou usando o método descrito aqui . Meu nginx.conf se parece com:

    location /upload {
        limit_except POST              { deny all; } 

        client_body_temp_path          /tmp;
        client_body_in_file_only       on;
        client_body_buffer_size        128K;
        client_max_body_size           20G;

        return 201 $request_body_file;
    } 

A idéia aqui é que, ao ativar client_body_in_file_only , cada solicitação é salva diretamente no disco. Além disso, o nome do arquivo para o qual foi salvo é retornado ao cliente.

Eu posso fazer upload de arquivos com cURL e ver que eles estão sendo transferidos na íntegra:

$ curl -i -F "[email protected]" http://server/upload > out.txt   
  % Total    % Received % Xferd Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
 100 3053k    0     0  100 3053k      0  7874k --:--:-- --:--:-- --:--:-- 7889k

O arquivo tem 3 MB e, com certeza, foram transferidos 3 MB. A resposta é:

$ cat out.txt 
HTTP/1.1 100 Continue

HTTP/1.1 201 Created
Server: nginx/1.13.4
Date: Tue, 22 Aug 2017 04:21:48 GMT
Content-Type: text/plain
Content-Length: 0
Connection: keep-alive

Observe que não recebi um nome de arquivo no corpo da resposta. Então no servidor não há nada abaixo de /tmp/ . Para onde foi o arquivo enviado?

    
por bcattle 22.08.2017 / 06:32

1 resposta

1

Consegui fazer isso funcionar usando o módulo ngx_echo . A chave é a diretiva echo_read_request_body , que, como o nome indica, lê explicitamente o corpo da solicitação.

Removendo a linha

return 201 $request_body_file;

E substituindo-o por

echo_read_request_body;
echo $request_body_file;

Fez o truque!

    
por 22.08.2017 / 06:45

Tags