使用 Django 在 Elastic Beanstalk 上使用 HTTP 到 HTTPS 以及运行状况链接

Mun*_*eeb 5 django amazon-web-services amazon-elastic-beanstalk

我正在尝试将 Http 重定向到部署在 AWS Beanstalk 上的 Django 中的 Https。当我从负载均衡器中删除运行状况链接时,Http 到 Https 工作正常。当负载均衡器中有链接时,应用程序停止工作。

我在 Aws Beanstalk 上托管的 Django 项目的设置文件中使用以下配置。

CORS_REPLACE_HTTPS_REFERER = True
HOST_SCHEME = "https://"
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_HSTS_PRELOAD = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
Run Code Online (Sandbox Code Playgroud)

Ole*_*kin 2

所有SECURE_SSL_REDIRECT = True非安全请求将被重定向到 https。非安全请求 - 通过http和 不匹配完成的请求SECURE_PROXY_SSL_HEADER

即使您的负载均衡器自行执行 http 到 https 重定向 - 在 django 和 simplier 中启用此选项(启用所有安全选项)也是很好的。


AWS ALB 运行状况检查无法设置自定义标头。我们可以使用SECURE_REDIRECT_EXEMPT -排除对某些端点的请求重定向到 https [r'^health/$']


AWS ALB 运行状况检查请求是针对实例 ip 执行的。为了允许 django 处理它们 - 需要将 ip 添加到ALLOWED_HOSTS :中["172.16.2.5", "my.example.com"]。这需要是实例专用 IP,ALB 将使用该 IP 来访问它。

这可以通过以下方式完成:


AWS ALB 无法添加 HSTS 标头。如果您想使用严格传输安全标头 - 它们应该添加到应用程序 django 端。这可以通过将SECURE_HSTS_SECONDS设置为非零来完成。

HSTS 标头仅添加到对安全请求(https://SECURE_PROXY_SSL_HEADER匹配)的响应中。