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

EC2实例上React+Apache2部署后AJAX调用Python脚本异常问题

我来帮你一步步排查这个问题,本地正常但EC2上出问题,大概率是网络、端口、权限或者配置的细节没处理到位,咱们逐个来捋:

1. 先确认Python脚本的监听范围

本地运行时脚本监听localhost:5000没问题,但EC2上要注意:

  • 执行命令sudo ss -tulpn | grep 5000,检查脚本是否在监听0.0.0.0:5000(所有网卡),而不是仅127.0.0.1:5000(仅本地回环)。如果只监听回环地址,Apache或外部请求根本访问不到脚本。
  • 要是脚本默认监听127.0.0.1,修改启动配置或代码,让它绑定0.0.0.0(比如Flask里用app.run(host='0.0.0.0', port=5000))。

2. 检查EC2安全组的端口规则

EC2默认会拦截大部分端口的入站请求:

  • 去EC2控制台的安全组配置里,给5000端口(或你脚本用的端口)添加入站规则,来源暂时设为0.0.0.0/0测试(没问题后再缩小到VPC内部或指定IP)。
  • 要是后续用Apache反向代理,其实可以不用开放5000端口给公网,先测试阶段放开更方便排查。

3. 重点排查AJAX请求的地址问题(最容易踩坑)

本地时你写localhost:5000没问题,但部署到EC2后:

  • 如果前端是通过Apache的公网IP/域名访问的,用户浏览器里的localhost:5000会指向用户自己的电脑,而不是EC2服务器!这是绝大多数人部署后遇到的核心问题。
  • 解决办法:
    • 临时方案:把AJAX请求地址改成EC2的公网IP:5000或私有IP:5000;
    • 生产方案:在Apache里配置反向代理,把/api这类路径转发到localhost:5000,这样前端请求/api/xxx就会被Apache转到Python脚本,不用暴露5000端口。
      举个配置例子,在你的Apache虚拟主机文件里加:
      ProxyPass /api http://localhost:5000/api
      ProxyPassReverse /api http://localhost:5000/api
      
      然后启用模块并重启Apache:
      sudo a2enmod proxy proxy_http
      sudo systemctl restart apache2
      

4. 处理CORS跨域问题

本地开发时浏览器对localhost的跨域限制较松,但EC2上可能触发CORS错误:

  • 如果用反向代理,前端和API的域名/端口一致,自然不会有CORS问题;
  • 要是直接访问5000端口,就在Python脚本里配置CORS:比如Flask用flask-cors,代码里加:
    from flask_cors import CORS
    app = Flask(__name__)
    CORS(app)  # 生产环境建议指定你的Apache域名,比如CORS(app, origins="https://your-domain.com")
    

5. 检查脚本权限和依赖

  • 确保运行Python脚本的用户(比如ubuntu或www-data)有足够权限访问NLP模型、抓取工具需要的文件;
  • 确认EC2上已经安装了所有依赖:执行pip list对比本地的依赖列表,或者把脚本的输出重定向到日志文件排查错误:
    python your_script.py > script.log 2>&1
    
    然后查看script.log里的报错信息。

6. 分步测试验证

  • 在EC2内部用curl http://localhost:5000/your-endpoint测试,看是否能正常返回JSON,排除脚本本身的问题;
  • 从本地电脑用curl http://EC2公网IP:5000/your-endpoint测试,验证安全组和端口监听是否正常。

你可以先从第3点的AJAX地址问题查起,这是部署后最常见的疏漏~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:31:46