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

Django+Vue电商站点POST请求返回Nginx 502 Bad Gateway错误求助

问题1:Gunicorn启动端口冲突解决

你遇到的端口占用是因为Nginx已经在配置中声明了监听8000端口,两者不能同时绑定同一个端口。你当前的Nginx配置已经通过upstream指定了转发到Unix套接字,不需要让Gunicorn绑定IP端口,按如下命令启动即可:

gunicorn --bind unix:/webapps/perulab/venv/run/gunicorn.sock core.wsgi

如果需要后台常驻运行,可以添加--daemon参数,更稳定的方式是编写systemd配置文件托管Gunicorn服务,避免进程意外退出。

启动前如果sock文件目录不存在,需要先创建对应目录并赋予运行Gunicorn的用户读写权限:

mkdir -p /webapps/perulab/venv/run/
chown -R 你的运行用户:用户组 /webapps/perulab/venv/run/

问题2:调用send_mail()触发502错误解决

该问题的根本原因是Django默认的send_mail()为同步执行逻辑,当邮件配置错误、服务器无法连接SMTP服务时,会触发长时间阻塞,超出Gunicorn的worker超时阈值后worker被强制终止,Nginx无法拿到响应就返回502错误,排查修复步骤如下:

  1. 校验邮件配置正确性
    检查Django settings.py中的邮件配置项,确保EMAIL_BACKEND、EMAIL_HOST、EMAIL_PORT、EMAIL_HOST_USER、EMAIL_HOST_PASSWORD、EMAIL_USE_TLS/EMAIL_USE_SSL所有参数和你使用的邮件服务商要求完全一致。同时确认VPS的出站规则、防火墙没有拦截邮件服务对应的端口。
  2. 手动测试邮件发送
    进入项目虚拟环境,执行Django shell手动触发邮件发送,查看具体报错:
python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('测试标题', '测试内容', '你的发件邮箱地址', ['测试收件邮箱地址'], fail_silently=False)

根据返回的报错信息针对性调整:如果是连接超时,检查网络连通性;如果是认证失败,核对用户名密码、授权码配置。
3. 临时验证定位问题
如果暂时无法排查邮件配置,可以先将EMAIL_BACKEND修改为django.core.mail.backends.console.EmailBackend,重启Gunicorn后测试对应POST接口,如果不再报502即可确认是邮件配置导致的问题。
4. 生产环境优化建议
生产环境建议引入Celery等异步任务框架处理邮件发送逻辑,避免邮件发送阻塞主接口响应,从根本上避免这类超时导致的502问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:15:04