[英]HTTP to HTTPS with health link on Elastic Beanstalk using Django
我正在尝试将 Http 重定向到部署在 AWS Beanstalk 上的 Django 中的 Https。 当我从负载平衡器中删除运行状况链接时,Http to 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
使用SECURE_SSL_REDIRECT = True
所有非安全请求将被重定向到 https。 非安全请求 - 通过http
完成且不匹配SECURE_PROXY_SSL_HEADER
请求。
即使您的负载均衡器自己执行 http 到 https 重定向 - 在 django 和更简单的(启用所有安全选项)中启用此选项也很好。
AWS ALB 运行状况检查无法设置自定义标头。 我们可以使用SECURE_REDIRECT_EXEMPT - [r'^health/$']
排除对某些端点的请求重定向到 https。
AWS ALB 运行状况检查请求是针对实例 ip 完成的。 为了允许 django 处理它们 - 需要将 ip 添加到ALLOWED_HOSTS : ["172.16.2.5", "my.example.com"]
。 这需要是实例私有 IP,ALB 将使用该 IP 来访问它。
这可以通过以下方式完成:
在实例启动时添加实例 ip 就像在example 中一样。 也可以使用自定义脚本和环境变量来完成。
AWS ALB 无法添加 HSTS 标头。 如果您想使用 Strict Transport Security 标头 - 它们应该添加到 app django 端。 这可以通过设置非零的 SECURE_HSTS_SECONDS来完成。
HSTS 标头仅添加到对安全请求的响应( https://
或SECURE_PROXY_SSL_HEADER
匹配)。
我遇到了同样的问题,我用中间件(python 3.x)修复了它:
生产设置.py:
MIDDLEWARE = ['market.middleware.ELBHealthChecker_middleware'] + MIDDLEWARE
ELB 中间件:
def ELBHealthChecker_middleware(get_response):
def middleware(request):
response = get_response(request)
if "ELB-HealthChecker" in request.META["HTTP_USER_AGENT"]:
from django.http import HttpResponse
return HttpResponse(status=200)
return response
return middleware
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_SSL_REDIRECT = True
这些在过去对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.