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

如何为EC2实例的内部及外部IP均启用HTTPS?

解决方案

方案1:用私有DNS让内部流量走内网(最简便,推荐)

不用改现有证书或Nginx配置,让内部系统继续用FQDN访问,但自动解析到内部IP走VPC内网:

  • 在AWS Route 53创建私有托管区,托管你的服务域名(比如api.yourdomain.com)。
  • 在私有托管区加一条A记录,把域名指向EC2的内部IP。
  • 把你的VPC和这个私有托管区关联上,这样VPC里的机器解析域名时会拿到内部IP,流量完全在VPC里跑;外部用户解析域名还是得到Elastic IP,正常走公网。
  • 保持Nginx原有配置不动,不管内外都是用域名访问,证书匹配,不会有SSL报错。

方案2:给Nginx加双Server块,支持域名和内部IP访问

如果必须让内部系统直接用IP访问,可以给Nginx单独加一个处理内部IP的server块:

  1. 搞定内部IP的SSL证书:
    私有IP(比如10.x.x.x)没法从Let's Encrypt获取公网证书,你得自己用私有CA签发证书,或者生成自签证书。
  2. 修改Nginx配置:
    加两个server块,分别处理域名和内部IP请求:
    # 原有的公网域名处理配置
    server {
        listen 443 ssl;
        server_name api.yourdomain.com;
    
        ssl_certificate /etc/letsencrypt/live/api.yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/api.yourdomain.com/privkey.pem;
    
        # 你的API代理或业务配置...
    }
    
    # 新增的内部IP处理配置
    server {
        listen 443 ssl;
        server_name 10.0.0.10; # 换成你的EC2内部IP
    
        ssl_certificate /path/to/internal-ip-cert.pem;
        ssl_certificate_key /path/to/internal-ip-key.pem;
    
        # 和域名块复用相同的API逻辑
        location / {
            proxy_pass http://localhost:8080; # 换成你的API端口
            # 其他proxy相关配置...
        }
    }
    
  3. 让内部客户端信任证书:
    因为这个内部IP的证书不是公网可信CA发的,得把证书导入内部客户端的信任列表里(比如Linux导到/etc/ssl/certs,Windows用证书管理器添加),不然还是会报SSL错误。

方案3:结合AWS ACM私有证书和内部DNS

如果全用AWS生态,可以这么搞:

  • 在AWS ACM里申请私有证书,可以包含你的域名和内部IP。
  • 把这个证书导出后配置到Nginx里(或者改用ALB挂载证书,把流量转发到EC2)。
  • 配合Route 53私有托管区,让内部解析域名到私IP,同时内部客户端信任ACM的私有CA,这样不管用域名还是内部IP访问都能正常走HTTPS。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:36:26