Django SSL重定向代码段修改,无法按预期工作

时间:2012-02-13 18:26:24

标签: python django ssl nginx

我使用Nginx作为网络服务器,使用反向代理到gunicorn django服务器。

我尝试使用此处的SSLRedirect代码段:

http://djangosnippets.org/snippets/85/

由于此代码段始终会在我的设置中从is_secure()返回false,从而导致重定向循环,因此我不得不进行一些更改。

SSL可以使用,但是当我访问http://domain.net/main时,它不会重定向到https://domain.net/main。是不是应该这样做?

下面概述了我所做的修改:

if 'HTTP_X_FORWARDED_PROTOCOL' in request.META:
    return True

在我的nginx conf中(我只需要SSL,不需要http):

server {
listen 8888;
server_name domain.net;

ssl on;
ssl_certificate /path/to/domain.pem;
ssl_certificate_key /path/to/domain.key;

# serve directly - analogous for static/staticfiles
location /media/ {
    root /path/to/root;
}

location /static/ {
    root /path/to/root;
}

location / {
    proxy_pass_header Server;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_connect_timeout 10;
    proxy_read_timeout 10;
    proxy_pass http://127.0.0.1:8881/;

    # note this line
    proxy_set_header X-Forwarded-Protocol https; 
}
}

1 个答案:

答案 0 :(得分:3)

完全用nginx完成。根本不需要涉及Django:

server {
    listen 80;
    rewrite ^(.*) https://$host$1 permanent;
}

server {
    listen 443;
    # The rest of your original server config here
}