You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gunicorn+Nginx部署出现500错误,无法访问网页排查

Gunicorn+Nginx 500错误排查方案

1. 先解决套接字文件的核心问题

  • 核对Gunicorn启动参数和Nginx配置里的套接字路径,必须完全一致(比如/tmp/myapp.sock不能写成/run/myapp.sock)。
  • 检查套接字权限:用ls -l /path/to/socket.sock查看,确保Nginx运行用户(通常是www-data)对该文件有读写权限。启动Gunicorn时可加--umask 007让同组用户获得权限,或者把Gunicorn和Nginx加入同一用户组。
  • 如果用systemd管理Gunicorn,确认服务配置里的套接字目录存在且权限正确,避免启动时无法创建套接字。

2. 聚焦视图层的内部错误(关键)

既然Gunicorn已经处理到视图层,500错误是Web框架(比如Django)的内部异常,和Nginx转发无关:

  • 查看Django的错误日志(默认在logs/目录,或Gunicorn的stderr日志),里面会有完整的异常栈,直接定位问题(比如数据库连接失败、模板缺失、环境变量未配置)。
  • 对比runserver和Gunicorn的运行环境:
    • 生产环境下DEBUG=False时,ALLOWED_HOSTS必须正确配置,否则请求会被拒绝。
    • 静态资源未执行python manage.py collectstatic,导致模板引用的静态文件404,进而引发页面渲染错误。
    • 生产环境的数据库配置(用户名、密码、主机)可能和开发环境不一致,导致视图查询数据库失败。

3. 检查Gunicorn worker运行状态

  • 用ps aux | grep gunicorn确认所有13个worker都在正常运行,有没有进程意外退出。
  • worker数量建议设置为2*CPU核心数+1,如果13个远超服务器核心数,会导致资源竞争,引发超时或错误,可先减少worker数测试。
  • 调整Gunicorn超时参数(比如--timeout 30),如果视图处理时间过长,会触发超时导致500错误。

4. 验证Nginx转发配置

  • 确保Nginx配置里的请求头设置正确,避免Django无法识别请求:
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    
  • 修改Nginx配置后,用nginx -t验证语法,再重启Nginx生效。

内容的提问来源于stack exchange,提问作者Alvar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:05:06