0

私はこれをやろうとしました:

  1. my settings.py と同じディレクトリに middleware.py (chmod 775, chown www-data) という名前のファイルを作成します。
  2. これを middleware.py に貼り付けます: http://djangosnippets.org/snippets/880/
  3. これを私のsettings.pyに貼り付けます:

    MIDDLEWARE_CLASSES = ( #...
        'djo.middleware.SSLRedirect',
    )
    
    SSL_ENABLED = True
    SSL_URLS = (
        r'/admin/',
    )
    

私は得る:内部サーバーエラー

示されている開発サーバーにエラーはありません。

提案?

4

1 に答える 1

0

問題が見つかりました。無限ループが発生し、このサイトに従って修正しました。

http://yuji.wordpress.com/2008/08/15/django-nginx-making-ssl-work-on-django-behind-a-reverse-proxy/#comment-1941

基本的に、これをファイルのプロキシの場所の部分の下にある nginx サーバーの conf 設定に追加します。

SECURE_PROXY_SSL_HEADER = (‘HTTP_X_FORWARDED_PROTOCOL’, $scheme)

次に、django 設定ファイルに追加します。

MIDDLEWARE_CLASSES = (...
'djo.middleware.SecureRequiredMiddleware',
)

ROOT_URLCONF = 'djo.urls'

HTTPS_SUPPORT = True
SECURE_REQUIRED_PATHS = (
    r'/admin/',

次に、「middleware.py」という同じ 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():
            for path in self.paths:
                if request.get_full_path().startswith(path):
                    request_url = request.build_absolute_uri(request.get_full_path())
                    secure_url = request_url.replace('http://', 'https://')
                    print self.paths, request_url, secure_url
                    return HttpResponsePermanentRedirect(secure_url)
        return None

出来上がり!必要なベース URL へのリダイレクト。

于 2013-05-04T00:46:56.043 に答える