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

在Amazon Linux 2023 EC2实例上通过PM2部署React+Vite应用后无法通过公网IP访问的求助

在Amazon Linux 2023 EC2实例上通过PM2部署React+Vite应用后无法通过公网IP访问的求助

看起来你已经把部署流程搭得差不多了,但卡在公网访问这一步,我来帮你一步步排查问题:

1. 最可能的原因:Vite默认只绑定localhost,外部无法访问

你现在用的prod脚本是直接启动Vite开发服务器,但Vite默认只会监听127.0.0.1(也就是只有EC2本机能访问),外部请求根本打不进来。

解决方法:修改package.json里的prod命令,加上--host 0.0.0.0让它监听所有网卡:

"scripts": {
  "dev": "env-cmd -f .env.development vite --port 5173 --host 0.0.0.0",
  "prod": "env-cmd -f .env.production vite --port 5173 --host 0.0.0.0",
  // ...其他脚本保持不变
}

修改后重新部署,或者在EC2上手动重启PM2:pm2 restart janus-ui,之后再尝试用公网IP访问。

2. 检查EC2实例内部的防火墙设置

Amazon Linux 2023默认启用了firewalld,哪怕安全组开了端口,实例内部的防火墙也可能把5173端口挡住了。

登录EC2执行以下命令:

# 永久放行5173端口
sudo firewall-cmd --add-port=5173/tcp --permanent
# 重载防火墙规则使设置生效
sudo firewall-cmd --reload
# 验证端口是否已成功放行
sudo firewall-cmd --list-ports

如果输出里包含5173/tcp,说明防火墙已经放行该端口。

3. 确认应用实际监听的地址和端口

在EC2上执行命令,查看5173端口的监听状态:

ss -tulpn | grep 5173

如果输出是LISTEN 0 128 0.0.0.0:5173 0.0.0.0:* users:(("node",pid=xxxx,fd=xx)),说明已经正确监听所有网卡;如果是127.0.0.1:5173,那还是只绑定了localhost,回到第一步修改Vite启动参数即可。

4. 生产环境部署的优化建议(重要)

你现在用Vite开发服务器跑生产环境是不合适的——开发服务器性能差、没有缓存优化,而且安全性不足。正确的生产流程应该是:

  • 在CodeBuild中执行npm run build生成静态文件到dist文件夹(你已经在buildspec里配置了这一步)
  • 在EC2上用静态服务器托管dist文件夹,比如用serve或者Nginx

用serve的修改方案:

  1. 修改start_server.sh:
#!/bin/bash
cd /janus-ui
# 全局安装serve静态服务器
npm install -g serve
# 用PM2启动serve,托管dist文件夹,监听5173端口和所有网卡
pm2 start serve --name "janus-ui" -- -s dist -l 5173 -n 0.0.0.0
pm2 startup
pm2 save
  1. 这样就不再依赖Vite开发服务器了,应用的性能和稳定性都会提升很多。

5. 验证网络连通性

在你的本地机器上执行以下命令,测试能不能连到EC2的5173端口:

# 用nc测试(如果没装nc可以用telnet替代)
nc -zv <你的EC2公网IP> 5173

如果显示succeeded!,说明网络通路没问题,问题出在应用本身;如果连接失败,回到安全组和防火墙的配置检查环节。

按照上面的步骤一步步排查,应该能解决公网访问的问题。

备注:内容来源于stack exchange,提问作者Mateusz Janus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 06:23:14