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
- Comprueba los permisos del archivo y de todas las carpetas superiores:
namei -l /var/www/mi-sitio/index.html. - Verifica que existe un archivo índice válido en la carpeta.
- Revisa la configuración del virtual host en busca de directivas
RequireoDeny. - 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.html2. Permitir el acceso en la configuración (Apache)
<Directory /var/www/mi-sitio>
Require all granted
</Directory>sudo systemctl reload apache23. 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.