繁体   English   中英

使用 Django 在 Elastic Beanstalk 上使用健康链接从 HTTP 到 HTTPS

[英]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 来访问它。

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


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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM