Estou executando o nginx / ruby-on-rails e tenho um formulário simples de várias partes para fazer upload de arquivos. Tudo funciona bem até eu decidir restringir o tamanho máximo dos arquivos que desejo enviar. Para fazer isso, defino o nginx client_max_body_size
para 1m (1 MB) e espero um status HTTP 413 (Solicitar Entidade Muito Grande) em resposta quando a regra é quebrada.
O problema é que quando eu carrego um arquivo de 1,2 MB, em vez de exibir a página de erro HTTP 413, o navegador trava um pouco e morre com a mensagem "A conexão foi reiniciada enquanto a página carregava".
Eu tentei quase todas as opções que o nginx oferece, mas nada parece funcionar. Alguém tem alguma ideia sobre isso?
Aqui está meu nginx.conf:
worker_processes 1;
timer_resolution 1000ms;
events {
worker_connections 1024;
}
http {
passenger_root /the_passenger_root;
passenger_ruby /the_ruby;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.x.com;
client_max_body_size 1M;
passenger_use_global_queue on;
root /the_root;
passenger_enabled on;
error_page 404 /404.html;
error_page 413 /413.html;
}
}
Obrigado.
**Edit**
Ambiente / UA: Windows XP / Firefox 3.6.13
fonte
Content-Length
e não fazendoTransfer-Encoding: chunked
.Expect
ser o caminho a seguir para grandes solicitações.request.setHeader(HttpHeaders.EXPECT, CONTINUE);
comimport org.apache.http.HttpHeaders;
eimport static org.jboss.netty.handler.codec.http.HttpHeaders.Values.CONTINUE;
Seu upload morre bem no final? 99% antes de cair? O corpo e os buffers do cliente são essenciais porque o nginx deve armazenar os dados de entrada. As configurações do corpo (dados do corpo da solicitação) especificam como o nginx lida com o fluxo em massa de dados binários de clientes de formulários com várias partes para a lógica do seu aplicativo.
A
clean
configuração libera memória e limites de consumo instruindo o nginx a armazenar o buffer de entrada em um arquivo e, em seguida, limpar esse arquivo mais tarde do disco, excluindo-o.Definir
body_in_file_only
aclean
e ajustar buffers para aclient_max_body_size
. A configuração da pergunta original já tinha o sendfile ativado, aumente o tempo limite também. Eu uso as configurações abaixo para corrigir isso, apropriadas em seus contextos de configuração local, servidor e http.fonte
openshift
php7
nginx
.Da documentação :
Suspeito que seja isso o que está acontecendo, se você inspecionar o HTTP para frente e para trás usando ferramentas como Firebug ou Live HTTP Headers (ambas extensões do Firefox), você poderá ver o que realmente está acontecendo.
fonte