La carga del archivo de imagen de 4 mb da un error HTTP 413 al subir al servidor de producción

Estoy intentando cargar una imagen del cliente a un servidor para procesarla y luego a un depósito S3 AWS. Funciona muy bien en un servidor local pero no en un servidor en vivo.

XMLHttpRequest cannot load https://api.parthenon-click.com/img_upload/cover. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.parthenon-click.com' is therefore not allowed access. The response had HTTP status code 413. 

Estoy usando ElasticBeanstalk PHP v5.4 para el servidor cliente y Node v7.0 con el servidor Express v4 para el servidor. El lado del cliente es simple html / css / jQuery. Tomo una foto de la biblioteca de usuarios y la paso al backend usando:

  $.ajax({ url: api_url, type: 'POST', data: form, processData: false, contentType: false, success: function(data){ console.log('upload successful!'); }, error: function(err){ console.log(err); } }); 

Esto funciona y guarda la imagen siempre que el archivo tenga menos de 1 mb. Aunque todavía recibo un error 504 HTTP. Y funciona sin importar el tamaño del archivo, siempre que esté ejecutando un servidor local.

Así que intenté boost los límites de body-parser , htaccess y multer :

Body-Parser:

 app.use(bodyParser.json({limit: '50mb'})); app.use(bodyParser.urlencoded({ limit: '50mb', extended: true, parameterLimit:50000 })); app.use(bodyParser.raw({ limit: '10mb'}) ); 

Multer:

 var upload = multer({ storage: storage, limits: { fileSize: 10000000 } }) 

.htaccess:

 php_value upload_max_filesize 30M 

Mis archivos de encabezado son útiles para cualquier otro tipo de solicitud de API. Los puse usando

 router.use(function(req, res, next) { // do logging //set CORS policy to 'allow' res.setHeader("Access-Control-Allow-Methods", "POST, PUT, OPTIONS, DELETE, GET"); res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); 

Y por último, pero no menos importante, SSL está habilitado en todas las versiones de dominio.

Nada de esto ha resuelto el problema. ¿Que me estoy perdiendo aqui?

Cuando se utiliza un servidor web como Nginx antes de Node, todas las solicitudes pasan a través de Nginx y son validadas por nginx incluso antes de llegar a Node.js.

Nginx tiene un archivo de configuración por defecto ubicado en /etc/nginx/nginx.conf . Este archivo tiene muchas propiedades predeterminadas para todas las solicitudes y una de ellas es client_max_body_size . El valor predeterminado para esa propiedad es 1m , como su archivo de 1MB.

Esa es también la razón por la que su archivo .htaccess no hizo nada (Node.js nunca hace nada con .htaccess , a menos que lo desee)

Puede cambiarlo manualmente a un número diferente y ese será el nuevo tamaño máximo de cuerpo para nginx (después de volver a cargar nginx), pero si desea un control “completo” y la aplicación verifica el tamaño del cuerpo, también puede configurarlo 0 , para deshabilitar la verificación del tamaño del cuerpo de la solicitud del cliente.
Setting size to 0 disables checking of client request body size.

Tenga en cuenta que al cambiar esa propiedad, también cambia el tamaño máximo de carga para las solicitudes de PHP.

    Intereting Posts