nginx搭配uwsgi部署Django无报错日志但返回500错误求助
排查步骤
- 检查uWSGI运行状态:
执行ps aux | grep uwsgi确认进程正常启动,再执行ls -l /run/uwsgi/app.sock确认socket文件存在且权限为ubuntu:ubuntu,权限值666符合配置要求。
确认uWSGI日志目录权限:执行ls -ld /var/log/uwsgi,确认ubuntu用户有该目录的读写执行权限,否则uWSGI无法写入日志,自然看不到报错信息。 - 补全Nginx SSL配置:
你当前只配置了80端口的HTTP服务,且配置了所有HTTP请求强制跳转HTTPS,但未提供443端口的SSL服务配置,属于典型的配置缺失。需要补充443端口的server块,配置SSL证书、HTTPS转发规则,X-Forwarded-Proto请求头也应该放在443的server块内,不应该放在80端口的配置中。 - 检查Django基础配置:
- 确认
ALLOWED_HOSTS配置项已添加你的业务域名example.com,未配置会直接触发500错误 - 确认你已手动创建日志目录:
mkdir -p /home/ubuntu/core/logs,且给ubuntu用户授予该目录的读写权限,否则Django无法写入日志文件,无法捕获报错 - 临时将
DEBUG配置改为True,直接访问服务查看具体错误信息,定位问题根源 - 若你开启了Django SSL相关安全配置,需要添加配置
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https'),否则Django无法正确识别HTTPS请求,会出现循环跳转或500错误 - 确认已执行
python manage.py collectstatic将所有静态资源收集到/home/ubuntu/core/assets/static目录下,且nginx运行用户有该目录的读取权限。
- 确认
- 清理冗余配置(非报错原因,建议优化):
uWSGI配置中wsgi-file和module两个参数作用重复,保留module = core.wsgi:application即可;virtualenv和home两个参数作用完全一致,删除任意一个即可。
内容的提问来源于stack exchange,提问作者KVISH
相关产品推荐
相关产品推荐

