2012-11-26 77 views

回答

1

這裏有幾個步驟。

首先,修改方式中間件檢查SSL:

def _is_secure(self, request): 
    if request.is_secure(): 
     return True 

    if 'HTTP_X_SSL_PROTOCOL' in request.META: 
     return True 

    return False 

然後改變你的nginx的配置如下:

server { 
    listen 80; 
    listen 443 ssl; 

    ... 

    location/{ 

     ... 
     proxy_set_header X-SSL-Protocol $ssl_protocol; 
     proxy_pass http://localhost:8000/; 
    } 
} 

proxy_set_header只會轉嫁如果ssl_protocol不爲空,即它是一個安全的連接。

重新啓動nginx,就完成了。

+2

由於django 1.4,你不需要定製的中間件,因爲它是內置的。另請參閱[SECURE_PROXY_SSL_HEADER](https://docs.djangoproject.com/en/dev/ref/settings/#secure-proxy-ssl-header)。順便說一句,nginx是個不錯的訣竅。 – bouke

0

添加到湯姆的答案。如果您在Heroku或其他負載平衡器後面,以下內容可能也有幫助。

def _is_secure(self, request): 
    if request.is_secure(): 
     return True 

    if 'HTTP_X_SSL_PROTOCOL' in request.META: 
     return True 

    # check the forwarded request's protocol 
    if request.META.get('HTTP_X_FORWARDED_PROTO')=='https': 
     return True 

    return False 
相關問題