JS请求指向本地而非EC2服务,不开放5000端口如何访问EC2 Flask服务?
问题根本原因
你当前的问题核心是前端JS代码运行在用户本地浏览器环境,代码中写死的127.0.0.1:5000默认指向运行浏览器的本地设备,而非EC2服务器。除了开放EC2 5000端口公网访问权限外,可选择以下方案解决:
可行方案
方案1:配置Apache反向代理(最推荐,无跨域问题,无需额外开放端口)
利用Apache已开放的80端口做请求转发,将特定路径的请求转发到EC2本地运行的Flask服务,步骤如下:- 开启Apache的代理模块:
a2enmod proxy proxy_http systemctl restart apache2 - 编辑Apache虚拟主机配置文件,添加如下规则:
ProxyPass /api http://127.0.0.1:5000 ProxyPassReverse /api http://127.0.0.1:5000 - 修改前端JS代码中的请求地址,改为
/api/xxx(直接请求当前域名的/api路径,无需加IP和端口),请求会自动由Apache转发到Flask服务。
- 开启Apache的代理模块:
方案2:本地SSH端口转发(适合临时开发测试场景,无需修改服务端配置)
如果你是本地开发测试用,可以在本地设备执行SSH端口转发命令,将本地5000端口的流量转发到EC2的5000端口:
保持SSH连接开启的状态下,本地JS请求ssh -L 5000:127.0.0.1:5000 你的EC2用户名@EC2公网IP127.0.0.1:5000就会自动转发到EC2上的Flask服务,无需在EC2安全组开放5000端口公网权限。方案3:切换服务部署逻辑
停止Apache服务,将原本Apache托管的静态页面、JS资源都放到Flask的静态资源目录托管,直接让Flask监听EC2公网80端口,前端可以直接用相对路径请求接口,无需额外端口配置。
内容的提问来源于stack exchange,提问作者임도경
相关产品推荐
相关产品推荐

