Estoy ejecutando nginx / ruby-on-rails y tengo un formulario simple de varias partes para cargar archivos. Todo funciona bien hasta que decido restringir el tamaño máximo de los archivos que quiero cargar. Para hacer eso, configuro el nginx client_max_body_size
en 1 m (1 MB) y espero un estado HTTP 413 (Solicitar entidad demasiado grande) en respuesta cuando esa regla se rompa.
El problema es que cuando subo un archivo de 1,2 MB, en lugar de mostrar la página de error HTTP 413, el navegador se cuelga un poco y luego muere con el mensaje "La conexión se restableció mientras la página se cargaba".
He probado casi todas las opciones que ofrece nginx, pero nada parece funcionar. ¿Alguien tiene alguna idea acerca de esto?
Aquí está mi 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;
}
}
Gracias.
**Edit**
Entorno / UA: Windows XP / Firefox 3.6.13
fuente
Content-Length
lugar de hacerTransfer-Encoding: chunked
.Expect
es el camino a seguir para solicitudes grandes.request.setHeader(HttpHeaders.EXPECT, CONTINUE);
conimport org.apache.http.HttpHeaders;
yimport static org.jboss.netty.handler.codec.http.HttpHeaders.Values.CONTINUE;
¿Tu carga muere al final? 99% antes de estrellarse? El cuerpo del cliente y los búferes son clave porque nginx debe almacenar los datos entrantes. Las configuraciones del cuerpo (datos del cuerpo de la solicitud) especifican cómo nginx maneja el flujo masivo de datos binarios desde clientes de formularios de varias partes a la lógica de su aplicación.
La
clean
configuración libera memoria y límites de consumo al indicarle a nginx que almacene el búfer entrante en un archivo y luego limpie este archivo del disco eliminándolo.Establecer
body_in_file_only
aclean
y ajustar tampones para elclient_max_body_size
. La configuración de la pregunta original ya tenía el archivo de envío activado, aumente también los tiempos de espera. Utilizo la configuración a continuación para solucionar esto, apropiada en su configuración local, servidor y contextos http.fuente
openshift
php7
nginx
.De la documentación :
Sospecho que esto es lo que está sucediendo, si inspecciona el HTTP de un lado a otro usando herramientas como Firebug o Live HTTP Headers (ambas extensiones de Firefox) podrá ver lo que realmente está sucediendo.
fuente