AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

在运行 Python 的 EC2 实例上终止 HTTPS

对于使用 Apache HTTP Server 和 Web Server Gateway Interface (WSGI) 的 Python 容器类型,您可使用配置文件来允许 Apache HTTP Server 使用 HTTPS。

将以下代码段添加到您的配置文件中,按照提示替换证书和私有密钥资料,并将该文件保存在源包的 .ebextensions 目录中。该配置文件执行以下任务:

  • packages 密钥使用 yum 安装 mod24_ssl

  • files 密钥在实例上创建以下文件:

    /etc/httpd/conf.d/ssl.conf

    配置 Apache 服务器。如果您的应用程序的名称不是 application.py,请将 WSGIScriptAlias 的值中突出显示的文本替换为您的应用程序的本地路径。例如,django 应用程序的路径可能是 django/wsgi.py。此位置应与您为环境设置的 WSGIPath 选项值相符。

    根据您的应用程序的要求,您可能还需要向 python-path 参数添加其他目录。

    /etc/pki/tls/certs/server.crt

    在实例上创建证书文件。将证书文件内容替换为证书的内容。

    注意

    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

    在实例上创建私有密钥文件。将私有密钥内容替换为用于创建证书请求或自签名证书的私有密钥的内容。

  • container_commands 密钥在一切配置完成后停止 httpd 服务,以便该服务使用新的 https.conf 文件和证书。

注意

该示例仅可用于使用 Python 平台的环境。

例 .ebextensions/https-instance.config

packages: yum: mod24_ssl : [] files: /etc/httpd/conf.d/ssl.conf: mode: "000644" owner: root group: root content: | LoadModule wsgi_module modules/mod_wsgi.so WSGIPythonHome /opt/python/run/baselinenv WSGISocketPrefix run/wsgi WSGIRestrictEmbedded On Listen 443 <VirtualHost *:443> SSLEngine on SSLCertificateFile "/etc/pki/tls/certs/server.crt" SSLCertificateKeyFile "/etc/pki/tls/certs/server.key" Alias /static/ /opt/python/current/app/static/ <Directory /opt/python/current/app/static> Order allow,deny Allow from all </Directory> WSGIScriptAlias / /opt/python/current/app/application.py <Directory /opt/python/current/app> Require all granted </Directory> WSGIDaemonProcess wsgi-ssl processes=1 threads=15 display-name=%{GROUP} \ python-path=/opt/python/current/app \ python-home=/opt/python/run/venv \ home=/opt/python/current/app \ user=wsgi \ group=wsgi WSGIProcessGroup wsgi-ssl </VirtualHost> /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----- container_commands: 01killhttpd: command: "killall httpd" 02waitforhttpddeath: command: "sleep 3"

注意

避免将包含私有密钥的配置文件提交到源控件。在测试完配置并确认其有效后,请在 Amazon S3 中存储私有密钥并将修改配置以在部署期间下载该密钥。有关说明,请参阅在 Amazon S3 中安全存储私钥

在单实例环境中,您还必须修改实例的安全组,以便允许端口 443 上的流量。以下配置文件使用 AWS CloudFormation 函数检索安全组的 ID,并向其中添加规则。

例 .ebextensions/https-instance-single.config

Resources: sslSecurityGroupIngress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]} IpProtocol: tcp ToPort: 443 FromPort: 443 CidrIp: 0.0.0.0/0

对于负载均衡的环境,将负载均衡器配置为保持不变地传输安全流量,或者解密后重新加密,以便实现端到端加密。