Causas posibles

  • 01. Problema
  • 02. Causas posibles
  • 03. Cómo comprobarlo
  • 04. Soluciones
  • 05. Prevención
  • Permisos insuficientes en los archivos o carpetas del sitio.
  • No existe un archivo índice (index.html) y el listado de directorios está desactivado.
  • Reglas explícitas de acceso en la configuración (Require, Deny) bloquean la petición.
  • SELinux o AppArmor están bloqueando el acceso del proceso del servidor web.

Cómo comprobarlo

  1. Comprueba los permisos del archivo y de todas las carpetas superiores: namei -l /var/www/mi-sitio/index.html.
  2. Verifica que existe un archivo índice válido en la carpeta.
  3. Revisa la configuración del virtual host en busca de directivas Require o Deny.
  4. Consulta el log de error para ver el motivo exacto que reporta el propio servidor.

Soluciones

1. Corregir permisos

sudo chmod 755 /var/www/mi-sitio
sudo chmod 644 /var/www/mi-sitio/index.html

2. Permitir el acceso en la configuración (Apache)

<Directory /var/www/mi-sitio>
    Require all granted
</Directory>
sudo systemctl reload apache2

3. Añadir un archivo índice

Asegúrate de que existe index.html o index.php (según tu stack) en la carpeta raíz del sitio.

Prevención

  • Aplica siempre el permiso mínimo necesario (755 en carpetas, 644 en archivos) en vez de 777.
  • Documenta cualquier regla de acceso restringido que añadas a un virtual host.
  • Prueba el sitio justo después de cada despliegue para detectar errores 403 pronto.

Preguntas frecuentes

¿Un 403 puede deberse a un firewall de aplicación web (WAF)?

Sí, si tienes un WAF o un proxy delante del servidor, puede estar bloqueando la petición por reglas propias antes de que llegue siquiera a Apache o Nginx.

¿Cuál es la diferencia entre 403 y 401?

401 indica que hace falta autenticarse (o las credenciales son incorrectas). 403 indica que, aunque te autentiques, no tienes permiso para acceder a ese recurso.

Artículos relacionados