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

如何让Firebase托管的HTTPS React应用连接EC2上的HTTP Express API?

解决方案

1. 为EC2上的Express配置CA签名SSL证书(最直接方案)

浏览器拒绝自签证书是因为不信任颁发机构,用Let's Encrypt可以免费获取可信CA签发的证书:

  • 在EC2服务器安装Certbot(以Ubuntu为例:sudo apt update && sudo apt install certbot)
  • 确保域名已解析到EC2公网IP,运行命令获取证书:sudo certbot certonly --standalone -d your-domain.com
  • 在Express中配置HTTPS服务:
const https = require('https');
const fs = require('fs');
const express = require('express');
const cors = require('cors');
const app = express();

// 配置CORS,允许你的Firebase托管域名
app.use(cors({ origin: 'https://your-firebase-app.web.app' }));

// 你的API路由
app.get('/api/test', (req, res) => {
  res.json({ status: 'success', data: 'Hello from HTTPS API' });
});

// 加载Let's Encrypt证书文件
const sslOptions = {
  key: fs.readFileSync('/etc/letsencrypt/live/your-domain.com/privkey.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/live/your-domain.com/fullchain.pem')
};

// 启动HTTPS服务器
https.createServer(sslOptions, app).listen(443, () => {
  console.log('HTTPS API running on port 443');
});
  • 记得在EC2安全组开放443端口的入站访问

2. 使用AWS应用负载均衡器(ALB)代理SSL请求

如果不想修改Express代码,可以用ALB处理HTTPS终结:

  • 在AWS证书管理器(ACM)申请免费SSL证书(绑定你的域名,需要域名验证)
  • 创建应用负载均衡器,配置HTTPS监听(443端口)并关联ACM证书
  • 创建目标组,将EC2实例的HTTP端口(如3000)加入目标组
  • 配置ALB转发规则,把HTTPS请求转发到目标组的HTTP端口
  • React直接调用ALB的HTTPS域名,同时在Express中配置CORS允许该域名

3. 用Firebase Functions做中间代理层

利用Firebase Functions的HTTPS能力做代理,避免混合内容问题:

  • 在Firebase项目中创建Cloud Function,示例代码:
const functions = require("firebase-functions");
const axios = require("axios");

exports.proxyApi = functions.https.onRequest(async (req, res) => {
  try {
    // 转发请求到EC2的HTTP API
    const targetUrl = `http://your-ec2-ip:3000${req.path}`;
    const response = await axios({
      method: req.method,
      url: targetUrl,
      data: req.body,
      headers: { ...req.headers, host: undefined } // 避免host头冲突
    });
    res.status(response.status).send(response.data);
  } catch (err) {
    res.status(err.response?.status || 500).send(err.message);
  }
});
  • 部署Function后,React调用https://your-firebase-project.cloudfunctions.net/proxyApi/your-endpoint
  • 确保EC2安全组允许Firebase Functions的IP段访问(或直接开放对应HTTP端口给公网,根据需求)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:15:30