2013-05-03 45 views
0

我试图做到这一点:力HTTPS在Nginx的Django的

  1. 创建在同一个目录中的文件名为middleware.py(搭配chmod 775,CHOWN www数据)作为我的settings.py
  2. 在middleware.py粘贴此:http://djangosnippets.org/snippets/880/
  3. 粘贴这在我的settings.py:

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

我收到:内部服务器错误

显示的开发服务器中没有错误。

对此提出建议?

+0

你检查错误日志吗? – Raptor 2013-05-03 06:20:19

+0

Nginx不会引发任何错误,并且django服务器只显示一个get请求。浏览器仅显示“发生服务器错误,请与管理员联系。”你能想到别的地方去试试看吗? – mh00h 2013-05-03 06:49:08

回答

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目录下创建一个文件g内容:

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 

Voilá!重定向所需的任何基本网址。