求助: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,那就是问题所在。 - 解决方式二选一:
- 修改Nginx的
proxy_pass为http://127.0.0.1:8000(和Gunicorn绑定的端口一致); - 调整Gunicorn的启动命令,改成绑定socket:比如
gunicorn --bind unix:/run/gunicorn.sock your_project.wsgi:application(记得替换成你的Django项目的wsgi模块)。
- 修改Nginx的
第二步:确保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
相关产品推荐
相关产品推荐

