在nginx服务器中指向https后,网站无响应

时间:2017-07-17 08:13:58

标签: django ssl nginx https

我在django框架中有一个web应用程序,我已经设置了一个nginx服务器来为该站点提供服务。我还在网站上设置了SSL。该网站适用于http和https。

现在我想将所有http请求定向到https,以便我的用户始终使用安全版本。

这是我的nginx配置:

server {
    listen 80;
    listen 443 ssl;
    server_name site.com www.site.com;
    ssl_certificate /path/to/SSL;
    ssl_certificate_key /path/to/SSL/key;
    location = /favicon.ico { access_log off; log_not_found off; }
    location /site_media/static/ {
        alias /home/user/folder/static/dist/;
    }
    location / {
        include         uwsgi_params;
        uwsgi_pass      unix:/tmp/site.sock;
    }
}

现在,当我将301重定向插入https并重新启动服务器时,该网站没有响应。

return         301 https://$server_name$request_uri;

进入我的

server { ... }

任何想法如何解决这个问题,任何建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

将未受保护的return语句放入服务器块将尝试重定向httphttps站点,从而产生循环。您可以将return语句放在if块中,并检测协议何时不是https,或者更常见的解决方案是将配置拆分为两个server块,例如:

server {
    listen 80;
    server_name site.com www.site.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl;
    server_name site.com www.site.com;
    ssl_certificate /path/to/SSL;
    ssl_certificate_key /path/to/SSL/key;
    location = /favicon.ico { access_log off; log_not_found off; }
    location /site_media/static/ {
        alias /home/user/folder/static/dist/;
    }
    location / {
        include         uwsgi_params;
        uwsgi_pass      unix:/tmp/site.sock;
    }
}