Cómo solucionar error 404 al subir archivos por carpeta temporal llena en cPanel con ModSecurity

Si tienes problemas al subir archivos grandes a tu servidor alojado en cPanel y recibes un error 404 inesperado, probablemente la carpeta temporal utilizada por ModSecurity está llena o mal configurada. Este problema ocurre porque ModSecurity, un firewall de aplicaciones web (WAF), maneja las cargas de archivos en una carpeta temporal que puede saturarse rápidamente, especialmente con archivos grandes o múltiples cargas simultáneas.


Cómo diagnosticar el problema

Puedes confirmar si este es tu problema con dos métodos sencillos:

1. Verifica el espacio en la carpeta temporal: Usa el siguiente comando para revisar cuánto espacio queda disponible en la carpeta temporal:

Si observas que la carpeta /tmp o la carpeta temporal asignada a ModSecurity está llena o casi llena, probablemente hayas identificado el problema.

2. Revisa los logs de ModSecurity en WHM: Desde WHM, ve a «ModSecurity Tools», filtra por el dominio afectado y verifica si aparecen errores del tipo:

Esto indica que ModSecurity está teniendo problemas al manejar la subida de archivos debido a la carpeta temporal.

Cómo solucionar el problema

A continuación te explico cómo solucionar este problema paso a paso, incluyendo detalles sobre qué hace cada comando y por qué es importante configurarlos correctamente.

1. Editar configuración de ModSecurity

Primero, necesitas ajustar la configuración que determina dónde y cómo ModSecurity almacena los archivos temporales.

Abre la configuración con este comando:

Luego, añade o modifica estas líneas:

Explicación de cada línea:

  • SecRequestBodyLimit 1073741824: Define el límite máximo del tamaño de archivo que se puede subir, aquí establecido en aproximadamente 1GB (en bytes). Puedes ajustar este valor según tus necesidades.
  • SecUploadKeepFiles Off: Indica que ModSecurity no retendrá los archivos temporales después de procesarlos.
  • SecTmpDir /modsec_tmp: Establece el directorio temporal que usará ModSecurity.
  • SecUploadDir /modsec_tmp: Define el directorio específico para la subida de archivos temporales.

2. Crear la carpeta temporal

La carpeta temporal debe existir y tener permisos adecuados para que ModSecurity pueda escribir en ella:

  • mkdir crea la carpeta temporal.
  • chmod 777 da permisos completos a todos los usuarios, asegurando que ModSecurity no tenga restricciones para escribir.

3. Reconstruir configuración y reiniciar Apache

Luego, debes aplicar estos cambios reconstruyendo la configuración de Apache y reiniciando el servicio:

  • /scripts/rebuildhttpdconf regenera la configuración de Apache en cPanel.
  • /scripts/restartsrv_httpd --restart reinicia Apache para aplicar los cambios inmediatamente.

4. Crear tarea cron para limpieza automática

Para evitar que la carpeta temporal se vuelva a llenar con el tiempo, es esencial configurar una tarea automática (cron) que borre periódicamente los archivos antiguos.

Crea el script con este comando:

Inserta el siguiente contenido:

  • /bin/find busca archivos específicos (*-file-*) en la carpeta temporal y elimina automáticamente aquellos que tengan más de un día de antigüedad.

5. Otorga permisos y reinicia cron

Finalmente, da permisos al script para que pueda ejecutarse automáticamente y reinicia el servicio cron para aplicar esta tarea:

  • chmod +x hace que el archivo sea ejecutable.
  • service crond restart reinicia el servicio cron para activar inmediatamente la tarea programada.

¡Listo! Ahora deberías poder subir archivos sin experimentar más errores 404 relacionados con problemas en la carpeta temporal. Mantener esta configuración limpia y ajustada evitará futuros problemas similares.