Estás corriendo tu proyecto Django, todo bien con Nginx y FastCGI, pero de repente, pum, un 500 en el navegador. Frustrante, ¿verdad? Uno tiende a entrar en pánico y revisar mil cosas, pero la mayoría de las veces el problema está donde menos esperas o donde no estás mirando. La pregunta es simple: ¿dónde diablos están los logs de error cuando Nginx está al frente con FastCGI y Django?
Logs de Nginx: Tu primer punto de ataque
Mira, no hay mucho misterio aquí. Si Nginx es el que está sirviendo la aplicación, entonces es Nginx el que va a registrar sus propios errores. Tu Django puede tener sus propios logs de aplicación, claro, pero si la conexión entre Nginx y FastCGI falla, o Nginx no puede encontrar lo que buscas, el error va a quedar ahí, en el lado de Nginx.
¿Dónde buscar los logs por defecto?
La ubicación por defecto de los logs de Nginx varía un poco dependiendo de tu sistema operativo y cómo lo instalaste. En general, vas a buscar en /var/log/nginx/.
- En un Linux estándar (Ubuntu, CentOS, etc.), lo más probable es que esté en
/var/log/nginx/error.log. - Si estás en Mac y usas Homebrew (que en mi caso es lo que más uso para desarrollo local), es común que los encuentres en
/usr/local/var/log/nginx/. Esto me costó entenderlo bien al principio, ojo que no es un path universal.
Pero lo más importante es que puedes y debes definirlo explícitamente en tu configuración de Nginx. Yo siempre lo hago, así no ando adivinando. Dentro de tu archivo nginx.conf o en el bloque de tu servidor virtual, puedes poner algo así:
error_log /var/log/nginx/mi_app_error.log warn;
Esa línea le dice a Nginx dónde escribir los errores y con qué nivel de severidad (warn, error, crit, etc.). Si no la defines, usará el valor por defecto que trae la instalación.
A mí, la verdad, me carga la sobreingeniería. Si tienes un problema, la solución simple es ir al log de la capa que falló primero. En este caso, si Nginx es tu proxy inverso y está recibiendo las peticiones, es el primero en avisar. De hecho, muchas veces el 500 que ves es un problema de conexión con FastCGI, no un error interno de Django. El error común es irte directo a los logs de Django o del servidor de aplicaciones, pero si Nginx es el que está sirviendo, es ahí donde tienes que partir. Siempre revisa tu nginx.conf o los includes de tus sitios para ver dónde apuntan los logs, es la forma más directa de no perder el tiempo.