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

求助:Ubuntu虚拟机配置Nginx+Gunicorn实现Django对接React

解决Django+Gunicorn+Nginx对接React构建包的端口无响应问题

刚接触Nginx配置踩坑太正常了,我帮你一步步排查和解决这个问题:

第一步:确认Gunicorn的运行方式是否匹配Nginx配置

你现在的8001端口Nginx配置是代理到unix:/run/gunicorn.sock,但你说Django在8000端口能正常运行,大概率是Gunicorn目前是绑定到8000端口而不是socket文件,导致Nginx找不到后端服务。

  • 先检查Gunicorn的运行参数:执行 ps aux | grep gunicorn,看看输出里有没有--bind unix:/run/gunicorn.sock,如果看到的是--bind 0.0.0.0:8000,那就是问题所在。
  • 解决方式二选一:
    1. 修改Nginx的proxy_pass为http://127.0.0.1:8000(和Gunicorn绑定的端口一致);
    2. 调整Gunicorn的启动命令,改成绑定socket:比如gunicorn --bind unix:/run/gunicorn.sock your_project.wsgi:application(记得替换成你的Django项目的wsgi模块)。

第二步:确保Nginx配置生效且无语法错误

每次修改Nginx配置后,必须做这两步:

  • 检查语法:sudo nginx -t,如果输出test is successful才说明配置没问题;
  • 重载配置:sudo systemctl reload nginx,让新配置生效。

如果之前没做这两步,哪怕配置写对了,Nginx也不会用新的规则。

第三步:优化React和Django的对接配置(合并成一个Server块更合理)

你现在用了两个Server块分开监听8001和8002,其实可以合并成一个,让同一个端口同时服务React前端和Django后端API,更符合生产环境的做法:

server {
    listen 8001;
    listen [::]:8001;
    server_name xx.xx.7.xx;

    # 根目录指向React的构建包
    root /home/username/cm_react_build/build;
    index index.html;

    # 处理Django的静态文件(假设你已经执行过python manage.py collectstatic把静态文件收集到项目的static目录)
    location /static/django/ {
        alias /home/username/cateringm/static/;
    }

    # 处理Django的API请求(假设你的后端API都以/api/开头,根据你的实际路由调整)
    location /api/ {
        include proxy_params;
        # 如果用socket:proxy_pass http://unix:/run/gunicorn.sock;
        # 如果用端口:proxy_pass http://127.0.0.1:8000;
    }

    # 处理React的前端路由,所有非API、非静态文件的请求都返回index.html(解决React单页应用路由刷新404的问题)
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 禁用favicon的日志记录
    location = /favicon.ico { access_log off; log_not_found off; }
}

第四步:检查端口监听和服务状态

  • 确认8001端口被Nginx监听:执行 sudo netstat -tulpn | grep LISTEN,看看有没有nginx进程监听0.0.0.0:8001或[::]:8001;
  • 确认Gunicorn在正常运行:如果是用systemd管理的Gunicorn,执行 systemctl status gunicorn,看状态是不是active (running);如果是直接启动的,用ps aux | grep gunicorn确认进程存在。

第五步:查看日志定位问题

如果上面的步骤都没解决,就去看日志找线索:

  • Nginx错误日志:cat /var/log/nginx/error.log,里面会记录连接后端失败、文件找不到等错误;
  • Nginx访问日志:cat /var/log/nginx/access.log,可以看到请求的状态码(比如502就是后端没响应);
  • Gunicorn日志:如果用systemd,执行 journalctl -u gunicorn,看有没有报错信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:26:32