django で SSL を扱いたい(その2)
ちょっと前進したのでメモ。
共有SSL限定かもしれないけど、request.META['REMOTE_ADDR'] の値で SSL かどうかは見分けられそう。具体的には、
- http://djangoauthapi.reguzy.jp/ -> 59.157.245.2
- https://ss1.coressl.jp/djangoauthapi.reguzy.jp/ -> 202.172.28.254
と、共有SSL経由かどうかで明確に違う(後者は共有SSLサーバのアドレスかな?)。あとは context_processor とかで判定して、パスを絶対パスに置き換えてやればできそう。また明日にでも試す。
ところでこの方法は共有SSLじゃなくてもいけるんだろうか?
SSLを使うときは、別にSSLサーバがあって、アドレスも変わるものなんだろうか?
これも調べる必要があるかなあ。
あと context_processor の見本とか。一応動くっぽい。
from django.conf import settings from django.http import get_host HTTPS_IP = '202.172.28.254' def ssl_context(request): host = get_host(request) base_url = 'http://%s/' % host if 'REMOTE_ADDR' in request.META: addr = request.META['REMOTE_ADDR'] if addr == HTTPS_IP: base_url = 'https://ss1.coressl.jp/%s/' % (host) return { 'base_url' : base_url }