2

現在、SSL対応のWebサイトを持っています。SSL は ELB レベルであるため、Apache http サーバーはこれを認識しません。Apacheがすべてのリクエストを強制的に実行するようにしようとしているので、リクエストは行われhttpsませんhttp。私はこれを含むSOに関する他のいくつかの投稿を読んでいました:

Django と SSL に関する質問

https://serverfault.com/questions/410542/disable-https-for-certain-path-in-nginx-results-in-instance-behind-elb-going-int

http://www.acmedata.in/2012/08/31/how-to-host-a-django-app-behind-elb-with-ssl/

これに ELB 構成を利用できますか? または、秘密鍵などを ELB から削除して、すべて Web サーバー レベルに配置する必要がありますか? これについては、これ以上の情報を見つけることができませんでした...

4

2 に答える 2

2

これはdjangoレベルで処理できます。これは私が使用するものです:

from django.http import HttpResponsePermanentRedirect
from django.conf import settings


class SecureRequiredMiddleware(object):
    def __init__(self):
        self.paths = getattr(settings, 'SECURE_REQUIRED_PATHS')
        self.enabled = self.paths and getattr(settings, 'HTTPS_SUPPORT')

    def process_request(self, request):
        if self.enabled and not request.is_secure():
            full_path = request.get_full_path()

            for path in self.paths:
                if full_path.startswith(path):
                    secure_url = request.build_absolute_uri(full_path).replace(
                        'http://', 'https://')
                    return HttpResponsePermanentRedirect(secure_url)

それをファイルに追加し、ミドルウェア設定でそれをポイントします。次に、2 つの設定項目を追加する必要があります。最初のものが呼び出され、次SECURE_REQUIRED_PATHSのような URL のリストである必要があります。

SECURE_REQUIRED_PATHS = [
    '/login',   #  require HTTPS for any URL starting with `/login`
    '/account', # require HTTPS for any URL starting with `/account`
    '/',        # require HTTPS for all URLs
]

2 番目は、次のフラグである必要がありますHTTPS_SUPPORT

HTTPS_SUPPORT = True

その後、ユーザーが HTTP で URL にアクセスするたびSECURE_REQUIRED_PATHSに、同等の HTTPS にリダイレクトされます。

于 2013-08-30T03:21:59.593 に答える