Fix Issues
Troubleshooting playbooks for common Django, Nginx, and Gunicorn production failures.
Best for developers who already deployed and now need to restore service fast.
Grouped by guide type, then difficulty
Narrow the list by experience level or stack, then work through the matching guides in recommended order.
Tasks guides
Follow actionable deployment and operations guides you can work through step by step.
Learn how to troubleshoot and fix the 'Connection Refused' error when Nginx fails to connect to Gunicorn. This guide covers common causes and solutions to get your web application running smoothly.
Learn how to resolve 'Permission Denied' errors when Nginx tries to access Gunicorn's socket file. This guide covers common causes and step-by-step fixes to ensure smooth communication between Nginx and Gunicorn in your Django deployment.
Troubleshooting guide to fix Django media files not serving in production. Learn how to configure media root, Nginx mappings, and permissions to resolve upload issues.
Troubleshooting guides
Use focused recovery playbooks to diagnose and fix common production failures fast.
A DisallowedHost error in Django production means Django rejected the incoming Host header. This is a security check, not a random app failure.
A common production failure is that your Django app loads, but CSS, JavaScript, or Django admin assets are missing.
CSRF Verification Failed in Django production usually appears after a deployment change that affects domains, HTTPS, cookies, or proxy headers.
A 502 Bad Gateway in a Django deployment usually means your reverse proxy is reachable, but it cannot get a valid response from the upstream app server.
A Gunicorn worker timeout in Django production usually means a worker process stopped responding before Gunicorn’s timeout limit expired.
Database connection errors in Django production usually appear right after a deploy, after a restart, or after an infrastructure change such as rotating secrets, moving PostgreS...
A common production failure is that the Django web app is healthy, but Celery tasks stop running.
If a Django file upload fails with 413 Request Entity Too Large, the rejection usually happens before Django sees the request. In a production stack like:
A failed Django migration during deploy usually means your release reached production, but the database change step did not finish cleanly.