已部署React的AWS Nginx服务器启动Django 0.0.0.0:8000无法访问如何解决
问题排查步骤
1. 安全组/防火墙端口未放行
- AWS实例的安全组入站规则默认不会开放8000端口,需要先确认安全组是否添加了允许TCP 8000端口的入站规则,测试阶段可临时设源地址为0.0.0.0/0,生产环境建议限制为指定IP
- 同时检查服务器内部的ufw/iptables规则,执行
sudo ufw status确认8000端口是否允许访问
2. 开发服务器不适合公网访问
python manage.py runserver是Django自带的调试用开发服务器,仅适配本地开发场景,性能极低且不支持生产环境部署。你参考的部署文档核心是使用Gunicorn作为Django的WSGI服务器,建议先按照文档流程配置好Gunicorn后台服务,再对接Nginx转发。
3. Nginx配置缺失Django转发规则
你当前的Nginx配置仅处理了React静态资源请求,所有路径都指向React的build目录,没有配置/api这类前缀转发到Django服务,参考调整后的配置:
server { listen 80 default_server; server_name example.org; return 301 https://example.org; } server { listen 443 ssl; server_name example.org; ssl_certificate /etc/nginx/ssl/ssl_bundle.crt; ssl_certificate_key /etc/nginx/ssl/example.key; # Django接口转发规则,所有/api开头的请求转给Gunicorn服务 location /api/ { proxy_pass http://127.0.0.1:8000; 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; } # Django静态资源路由,路径和你实际的STATIC_ROOT配置保持一致 location /static/ { root /home/ubuntu/你的Django项目目录; } # React静态资源兜底路由 location / { root /home/ubuntu/example/build; index index.html index.htm; try_files $uri $uri/ /index.html; } }
配置修改后执行sudo nginx -t验证配置合法性,无报错后执行sudo systemctl reload nginx重载配置即可生效。
4. Django配置校验
检查Django项目settings.py中的ALLOWED_HOSTS参数,必须添加你的服务器域名或公网IP,否则会返回400错误,示例配置:ALLOWED_HOSTS = ['example.org', '你的服务器公网IP']
5. 临时测试注意事项
如果需要临时通过公网IP:8000直接访问测试,执行ss -tulnp | grep 8000确认服务监听地址为0.0.0.0:8000,不存在本地回环绑定限制。
内容的提问来源于stack exchange,提问作者ank
相关产品推荐
相关产品推荐

