安装AWS CodeDeploy后EC2实例无法正常提供React应用服务问题咨询
CodeDeploy部署后React前端无法访问问题排查与修复方案
CodeDeploy代理默认行为说明
CodeDeploy代理(codedeploy-agent)本身不会主动修改系统防火墙、端口规则或者应用配置,它仅负责按照指定的AppSpec.yml脚本完成部署动作(拉取代码、执行自定义钩子脚本、替换文件等),所有环境变更都是部署脚本内的操作导致的,和代理本身无关。
可能的问题诱因及排查步骤
- 端口监听规则异常
先核查React进程是否正常运行,以及监听地址是否支持公网访问:
执行ss -tulnp | grep -E "(3000|5000)",其中3000为React默认服务端口,5000为你的Node后端端口。
如果React进程仅监听127.0.0.1:3000,未监听0.0.0.0:3000,公网请求就会超时,这是最常见的问题。修复方式是启动React时指定Host参数:HOST=0.0.0.0 npm start,也可在package.json的启动脚本里添加--host 0.0.0.0参数。 - 防火墙/安全组规则被部署脚本修改
Amazon Linux默认用firewalld或者iptables管理端口规则,先检查本地防火墙是否放开了React端口:
执行iptables -L -n或者firewall-cmd --list-all,如果3000端口没有放通,执行firewall-cmd --add-port=3000/tcp --permanent && firewall-cmd --reload临时修复,再核查CodeDeploy部署钩子脚本(比如AfterInstall、ApplicationStart阶段的脚本)是否存在误操作清空防火墙规则、重置端口配置的逻辑。
同时同步确认EC2实例的安全组入站规则是否放开了3000端口的公网访问权限。 - React代理配置失效问题
你配置的"proxy": "http://localhost:5000/"仅在React开发模式下生效,如果你的部署流程是先执行npm run build打包React静态资源,再用Nginx或者Node直接托管静态文件,该proxy配置不会生效,需要在静态资源托管服务(比如Nginx)里单独配置反向代理规则转发到5000端口。
先确认Staging1的部署流程是否和Production、Staging2一致:是否为开发模式启动React,还是打包后托管静态资源,有没有漏掉代理配置的同步。 - 部署目录权限问题
检查React相关文件、构建产物目录是否开放了codedeploy-agent运行用户(默认是root)的访问权限,避免进程启动后读不到静态文件导致服务假死。执行ls -l /path/to/your/client/build确认权限配置,异常的话执行chown -R root:root /path/to/your/project && chmod -R 755 /path/to/your/project修复。
修复验证
执行完对应修复操作后,先在EC2本地执行curl http://localhost:3000确认是否能正常返回React页面内容,再从公网环境访问测试即可。
内容的提问来源于stack exchange,提问作者Jack P
相关产品推荐
相关产品推荐

