为 EC2 实例的内部和外部 IP 启用 HTTPS

问题描述 投票:0回答:1

我有一个附加到弹性 IP 的 EC2 实例,并通过 nginx 向公众提供 REST API。 FQDN 指向弹性 IP 地址,并且该域有一个有效的 Lets Encrypt SSL 证书。这对于通过 HTTPS 从互联网访问服务器的系统非常有用。

对于访问同一服务器的内部系统,我想使用服务器的内部 IP 地址而不是 FQDN 指向的地址来将流量保留在我的 VPC 内。然而,当然 SSL 证书与 FQDN 绑定并且客户抱怨。

如何实现此场景,以便访问内部和外部 IP 都是 HTTPS?

nginx ssl https certbot
1个回答
0
投票

这是我完成此任务的方法:

  • 我创建了两个 wsgi 服务:内部和外部,每个服务使用唯一的 .sock 文件: 例如

      ExecStart=/usr/bin/python3 /usr/local/bin/gunicorn --bind unix:/tmp/web-internal.sock wsgi:app
      ExecStart=/usr/bin/python3 /usr/local/bin/gunicorn --bind unix:/tmp/web-external.sock wsgi:app
    
  • 我创建了两个 nginx 配置文件:内部和外部,每个配置文件都通过 .sock 文件引用同名的 wsgi 应用程序: 例如(仅内部 nginx 片段)

      location / {
          proxy_pass http://unix:/tmp/web-internal.sock;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      }
    
  • 每个内部和外部 nginx 配置文件都会侦听 EC2 内部 IP 地址,但端口不同

  • 我将 Lets Encrypt 证书附加到公共 FQDN 处的面向外部的 nginx

  • 我创建了一个私有证书颁发机构 (CA) 和一个自签名证书,并与所有将访问 API 内部版本的客户端共享私有 CA。该证书包含 API 服务器的内部 IP 地址作为主题备用名称。

现在我可以让内部服务通过 HTTPS 通过 EC2 内部 IP 地址访问 API。外部服务可以使用 LetsEncrypt 颁发的证书和 HTTPS 通过 FQDN 访问 API。

© www.soinside.com 2019 - 2024. All rights reserved.