本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在运行 Go 的 EC2 实例上终止 HTTPS
对于 Go 容器类型,您可以使用配置文件和 nginx 配置文件(用于将 nginx 服务器配置为使用 HTTPS)来启用 HTTPS。
将以下代码段添加到您的配置文件中,按照提示替换证书和私有密钥占位符,并将该文件保存在源包的 .ebextensions 目录中。该配置文件执行以下任务:
- 
      
Resources密钥在您的环境实例使用的安全组上启用端口 443。 - 
      
files密钥在实例上创建以下文件:/etc/pki/tls/certs/server.crt- 
            
在实例上创建证书文件。
certificate file contents替换为证书的内容。注意
YAML 依赖一致的缩进。当替换示例配置文件中的内容时,应匹配缩进级别,并且确保您的文本编辑器使用空格而不是字符来进行缩进。
如果您有中间证书,请将其放入
server.crt中您的站点证书的后面:-----BEGIN CERTIFICATE-----certificate file contents-----END CERTIFICATE----------BEGIN CERTIFICATE-----first intermediate certificate-----END CERTIFICATE----- -----BEGIN CERTIFICATE-----second intermediate certificate-----END CERTIFICATE----- /etc/pki/tls/certs/server.key- 
            
在实例上创建私有密钥文件。
private key contents替换为用于创建证书请求或自签名证书的私钥内容。 
 - 
      
container_commands密钥在一切配置完成后重启 nginx 服务器,以便让该服务器加载 nginx 配置文件。 
例 .ebextensions/https-instance.config
files:
  /etc/pki/tls/certs/server.crt:
    content: |
      -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
      
  /etc/pki/tls/certs/server.key:
    content: |      
      -----BEGIN RSA PRIVATE KEY-----
      private key contents # See note below.
      -----END RSA PRIVATE KEY-----
container_commands:
  01restart_nginx:
    command: "service nginx restart"注意
避免将包含私有密钥的配置文件提交到源控件。在测试完配置并确认其有效后,请在 Amazon S3 中存储私有密钥并修改配置以在部署期间下载该密钥。有关说明,请参阅 在 Amazon S3 中安全地存储私有密钥。
将以下内容放置在源包的 .conf 目录内扩展名为 .ebextensions/nginx/conf.d/ 的文件中 (例如 .ebextensions/nginx/conf.d/https.conf)。app_port替换为应用程序监听的端口号。此示例配置 nginx 服务器使用 SSL 侦听端口 443。有关 Go 平台上的这些配置文件的更多信息,请参阅 配置代理服务器。
例 。 ebextensions/nginx/conf.d/https.conf
# HTTPS server
server {
    listen       443;
    server_name  localhost;
    
    ssl                  on;
    ssl_certificate      /etc/pki/tls/certs/server.crt;
    ssl_certificate_key  /etc/pki/tls/certs/server.key;
    
    ssl_session_timeout  5m;
    
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers   on;
    
    location / {
        proxy_pass  http://localhost:app_port;
        proxy_set_header   Connection "";
        proxy_http_version 1.1;
        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 https;
    }
}在单实例环境中,您还必须修改实例的安全组,以便允许端口 443 上的流量。以下配置文件使用 Amazon CloudFormation 函数检索安全组的 ID 并向其添加规则。
例 .ebextensions/ .config https-instance-single
Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0对于负载平衡的环境,您可以将负载均衡器配置为要么原封不动地传递安全流量,要么解密并重新加密以进行加密。 end-to-end