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

AWS Ubuntu 16.04 EC2实例中两Express服务器跨端口访问文件问题

问题排查与解决方案

嘿,我来帮你梳理下几个最可能的问题点,毕竟在EC2上跑多端口服务时,这类跨端口加载资源的坑真的很常见!

1. 别再用localhost了!这是核心误区

你在HTML里写的//localhost:84/test.js,是浏览器端的请求——浏览器里的localhost指的是用户自己的本地电脑,而不是你的EC2实例!

你需要把localhost替换成EC2实例的公网IP或者绑定的域名,比如:

<script type="text/javascript" src="//your-ec2-public-ip:84/test.js"></script>

如果你的EC2实例有弹性IP或者域名,直接用那个就行。

2. EC2安全组没开放84端口

就算你改对了IP,AWS的安全组默认会阻止大部分端口的外部访问。你需要:

  • 登录AWS控制台,找到你的EC2实例对应的安全组
  • 添加一条入站规则:协议选TCP,端口范围填84,来源可以暂时设为0.0.0.0/0(测试用,生产环境建议限制为特定IP)

3. 第二个Express服务器没配置静态文件服务

你说把test.js放在了各种位置,但如果第二个服务器没告诉Express要托管静态文件,它根本不会返回这个文件。比如:

  • 把test.js放在第二个服务器项目的public文件夹里
  • 在第二个服务器的代码里添加静态文件托管配置:
const express = require('express');
const app = express();

// 关键:托管public目录下的静态文件
app.use(express.static('public'));

app.listen(84, '0.0.0.0', () => {
  console.log('Second server running on port 84');
});

这样访问/test.js就会对应到public/test.js文件。

4. 跨域资源共享(CORS)限制

因为两个服务器在不同端口,浏览器会触发同源策略,阻止加载跨端口的JS文件。你需要在第二个Express服务器上启用CORS:

  • 先安装cors包:
npm install cors
  • 在第二个服务器代码里添加:
const cors = require('cors');
app.use(cors()); // 测试阶段允许所有来源,生产环境可以配置具体的origin(比如第一个服务器的地址)

5. 第二个服务器绑定了错误的地址

如果你的第二个服务器是这样写的:

app.listen(84, 'localhost', () => { ... });

那它只会监听EC2实例内部的127.0.0.1地址,外部请求根本打不进来。必须改成绑定0.0.0.0,这样才能接受来自任意IP的请求:

app.listen(84, '0.0.0.0', () => {
  console.log('Second server is accessible externally on port 84');
});

建议你按照这个顺序一步步排查,先改localhost为EC2公网IP,再检查安全组,这两个是最容易踩的坑!

内容的提问来源于stack exchange,提问作者dennis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:30:48