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

如何在无负载均衡器的情况下为EC2上的Express服务配置ACM证书实现HTTPS?

替代负载均衡的EC2后端HTTPS配置方案及ACM证书使用方法

一、无需负载均衡的HTTPS配置替代方案

1. 直接在EC2实例上配置HTTPS(Nginx反向代理+证书)

  • 优点:
    • 成本极低,仅需承担EC2实例基础费用,无额外服务开销
    • 配置流程直观,适合学习阶段深入理解HTTPS原理
    • 完全掌控服务器端SSL/TLS配置细节
  • 缺点:
    • 存在单点故障风险,EC2实例宕机则服务完全中断
    • 需手动维护证书续期(若使用非托管证书)
    • 无法实现自动扩容,高流量场景下性能瓶颈明显
    • SSL/TLS加密解密性能完全依赖EC2实例硬件配置

2. 用CloudFront反向代理EC2后端

  • 优点:
    • 借助CloudFront全球边缘节点,大幅提升全球用户访问速度
    • 自动管理ACM证书续期,无需手动操作
    • 自带基础DDoS防护能力,提升服务安全性
    • 低流量场景下成本远低于负载均衡,按实际使用量计费
  • 缺点:
    • 配置复杂度略高于直接在EC2部署,需熟悉CloudFront源站配置规则
    • 动态API场景下需谨慎配置缓存策略,避免返回过期数据
    • CloudFront与EC2之间通信若需加密,仍需在EC2端配置证书

3. 使用API Gateway集成EC2后端(仅适用于API服务)

  • 优点:
    • 完全托管式服务,无需维护EC2实例操作系统和Web服务器
    • 自动处理HTTPS流量,原生支持ACM证书
    • 内置API限流、身份认证、请求转换等功能,无需自行开发
    • 低调用量场景下成本极低,按请求次数计费
  • 缺点:
    • 复杂Express应用迁移时需调整架构(适配API Gateway集成规则)
    • 存在一定请求延迟,不适合对响应速度要求极高的场景
    • 不支持WebSocket等长连接协议

二、无负载均衡下使用ACM证书的步骤

ACM证书默认分为两类:一类用于AWS托管服务(如CloudFront、ELB),无法直接导出;另一类支持导出,可用于EC2等第三方服务器。具体操作如下:

  1. 申请可导出的ACM证书

    • 登录AWS控制台进入ACM服务,选择「请求公有证书」
    • 输入后端域名(如api.yourdomain.com),选择「DNS验证」(若用Route53可自动添加验证记录,快速完成域名验证)
    • 证书签发后,确认标记为「可导出」(申请时需选择「用于第三方设备或服务」的用途)
  2. 导出并上传证书文件

    • 在ACM控制台找到目标证书,点击「导出」,获取PEM格式的证书、私钥和证书链文件
    • 将文件上传到EC2实例安全目录(如/etc/ssl/certs/),设置私钥权限为600(避免其他用户读取)
  3. 配置服务使用证书

    • Express直接配置:
      const https = require('https');
      const fs = require('fs');
      const express = require('express');
      const app = express();
      
      // 业务路由逻辑
      app.get('/api', (req, res) => {
        res.json({ status: 'ok', message: 'HTTPS enabled' });
      });
      
      const sslOptions = {
        key: fs.readFileSync('/etc/ssl/certs/private.key'),
        cert: fs.readFileSync('/etc/ssl/certs/cert.pem'),
        ca: fs.readFileSync('/etc/ssl/certs/chain.pem')
      };
      
      https.createServer(sslOptions, app).listen(443, () => {
        console.log('HTTPS server running on port 443');
      });
      
    • Nginx反向代理(推荐,性能更优):
      server {
          listen 443 ssl;
          server_name api.yourdomain.com;
      
          ssl_certificate /etc/ssl/certs/cert.pem;
          ssl_certificate_key /etc/ssl/certs/private.key;
          ssl_trusted_certificate /etc/ssl/certs/chain.pem;
      
          location / {
              proxy_pass http://localhost:3000; # 对应Express运行端口
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      }
      
      # 可选:HTTP请求重定向到HTTPS
      server {
          listen 80;
          server_name api.yourdomain.com;
          return 301 https://$server_name$request_uri;
      }
      
  4. 安全组配置

    • 开放EC2实例安全组的443端口(HTTPS)和80端口(若配置HTTP转HTTPS),允许公网访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:53:13