AWS EC2实例开放8000、3000端口后无法访问Django与React服务咨询
排查方案
1. 检查EC2实例操作系统自带的防火墙规则
这是最常见的原因,安全组配置仅作用于AWS虚拟网络层面,实例内部的防火墙会额外拦截流量:
- 若你使用的是Ubuntu/Debian系统,执行
sudo ufw status查看防火墙状态,如果是开启状态,执行以下命令放行端口:sudo ufw allow 3000/tcp sudo ufw allow 8000/tcp - 若你使用的是CentOS/RHEL/Amazon Linux 2系统,执行
sudo firewall-cmd --list-all查看规则,放行端口命令如下:sudo firewall-cmd --add-port=3000/tcp --permanent sudo firewall-cmd --add-port=8000/tcp --permanent sudo firewall-cmd --reload
2. 检查Django配置项ALLOWED_HOSTS
Django默认会校验请求的Host头,未配置的公网IP访问会直接返回400错误:
打开Django项目的settings.py文件,修改ALLOWED_HOSTS配置,添加你的EC2公网IP:
ALLOWED_HOSTS = ['你的EC2公网IP', 'localhost', '127.0.0.1']
修改后重启Django服务即可。
3. 检查VPC子网关联的网络ACL规则
AWS子网层面的网络ACL默认允许所有流量出入,但若你之前修改过配置,需要确认入站/出站规则中允许了3000、8000端口的流量。
4. 确认访问时使用HTTP协议
Django和React的开发服务器默认都只支持HTTP访问,若浏览器自动跳转HTTPS,需要手动在地址栏前缀加上http://再访问。
额外提示:不建议用sudo权限启动Django、React的开发服务器,避免不必要的权限溢出风险,非特权用户只要端口没有被占用就可以正常启动服务。
内容的提问来源于stack exchange,提问作者chococroqueta
相关产品推荐
相关产品推荐

