Esta fue una semana de respuestas HTTP un tanto insólitas para mí. Luego de haber comentado mi experiencia diagnosticando una respuesta HTTP 503, esta vez me tocó solucionar el caso de una respuesta HTTP 413 en un servidor Nginx:



Las respuestas 4xx (para aquellos desprevenidos) son errores provocados por el cliente, mientras que las respuestas 5xx son errores originados en el servidor. Por ende, esta respuesta HTTP 413 es un error causado por el cliente. De acuerdo a la RFC 7231, esta respuesta indica que el servidor ha rechazado la solicitud del cliente, porque el tamaño de la misma es superior al máximo permitido según la configuración del servidor.

Por otro lado, el log de errores (error.log) del servidor Nginx era más que claro al respecto:

2016/08/05 07:20:19 [error] 8438#0: *2543521 client intended to send too large body: 10445874 bytes, client: 264.12.398.722, server: www.linuxito.com, request: "POST /my_hidden_folder/upload.php HTTP/1.1", host: "www.linuxito.com", referrer: "https://www.linuxito.com/my_hidden_folder/backup_my_nasty_files.php"

Esto puede ser perfectamente normal si se está tratando de subir al servidor un archivo de gran tamaño, o si una aplicación sube archivos adjuntos como variables POST (no es poco común). Más aún si se ha realizado un hardening sobre el servidor Nginx reduciendo los tamaños máximos permitidos para los buffers asociados a los clientes (con el objetivo de mitigar ataques de tipo DoS).

Para evitar este error, siempre que haya sido provocado por tráfico válido, se debe aumentar el tamaño máximo permitido para las solicitudes de los clientes, por ejemplo aumentarlo a 2 ó 5 MB, en la variable client_max_body_size dentro del archivo de configuración de servidor Nginx (/usr/local/nginx/conf/nginx.conf):

  client_max_body_size 5M;

Si además la solicitud del cliente es procesada por PHP, se deberá aumentar el tamaño para subidas de archivos ty payload de solicitudes POST en el archivo php.ini:

  upload_max_filesize = 5M
  post_max_size = 5M

Luego es necesario reiniciar el servidor PHP-FPM para que tome los cambios realizados.

Referencias

Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content


Tal vez pueda interesarte


Compartí este artículo