本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在运行 Node.js 的 EC2 实例上终止 HTTPS
以下示例配置文件将扩展默认 nginx 配置,以在端口 443 上进行侦听,并终止公有证书和私有密钥的 SSL/TLS 连接。
如果已为增强型运行状况报告配置环境,则需要配置 nginx 以生成访问日志。为此,通过删除前导 # For enhanced health... 字符,在显示为 # 的注释下方取消对行块的注释。
例 .ebextensions/https-instance.config
files:
  /etc/nginx/conf.d/https.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      # 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;
          # For enhanced health reporting support, uncomment this block:
          #if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
          #    set $year $1;
          #    set $month $2;
          #    set $day $3;
          #    set $hour $4;
          #}
          #access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
          #access_log  /var/log/nginx/access.log  main;
          
          location / {
              proxy_pass  http://nodejs;
              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;
          }
      }
      
  /etc/pki/tls/certs/server.crt:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
      
  /etc/pki/tls/certs/server.key:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN RSA PRIVATE KEY-----
      private key contents # See note below.
      -----END RSA PRIVATE KEY-----files 密钥在实例上创建以下文件:
/etc/nginx/conf.d/https.conf- 
        
配置 nginx 服务器。nginx 服务启动时加载此文件。
 /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替换为用于创建证书请求或自签名证书的私钥内容。 
注意
避免将包含私有密钥的配置文件提交到源控件。在测试完配置并确认其有效后,请在 Amazon S3 中存储私有密钥并修改配置以在部署期间下载该密钥。有关说明,请参阅 在 Amazon S3 中安全地存储私有密钥。
在单实例环境中,您还必须修改实例的安全组,以便允许端口 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