簡體   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