Un 403 se distingue de un 404 de forma útil: el servidor encontró lo que pediste. Luego algo dijo que no. Eso lo reduce a cuatro cosas.
1. No hay archivo de índice
Una petición a un directorio sin index.php ni index.html, con el listado desactivado, da un 403. Es el comportamiento correcto y suele significar que un despliegue no terminó.
ls -la /var/www/site/
2. El servidor no puede leerlo
Un archivo que el usuario web no puede leer se rechaza. Comprueba el propietario tanto como los permisos: los permisos están bien mucho más a menudo que el propietario.
namei -l /var/www/site/index.php
namei recorre la ruta entera e imprime los permisos en cada nivel. Un directorio a mitad de camino sin bit de ejecución bloquea todo lo que hay debajo, y ese es el caso que se pasa por alto.
3. Una regla lo está denegando
grep -rn "deny\|Require all denied" /etc/nginx/sites-enabled/ .htaccess 2>/dev/null
Las reglas de seguridad que deniegan por extensión o por directorio son el 403 buscado. Si lo que cae en la red es tu propio archivo, la regla es demasiado amplia.
4. Un cortafuegos o un WAF
Si el 403 llega con una página que no es la tuya, viene de algo que está delante del servidor. Su propio registro nombra la regla que coincidió.