当下游处理ssl时,Nginx从同一server_name块上的http重写为https

时间:2016-10-11 07:42:38

标签: django ssl nginx

我们现在已经有了这个问题,它开始在屁股上咬我们了。我们在django框架上为python编写的客户端运行一个站点。然后我们使用nginx作为django的webserver / proxy。这通常是最标准的设置,效果很好。

问题是我们的客户端有更高的另一个apache服务器。该服务器处理ssl终止,并通过普通的http将请求传递给我们。 apache服务器接受2个域名上的http和https。

我们可以在nginx级别轻松地将http重写为https,但问题在于用户可以删除https并使用http。

nginx级别是否有办法强制用户在https://secure.example.com上时强制返回http://secure.example.com

由于

1 个答案:

答案 0 :(得分:0)

通常的技术是代理处理ssl终止以添加X-Forwarded-Proto标头。然后,上游应用程序可以在进入安全区域时有条件地重定向。

nginx这可以使用map

来完成
map $http_x_forwarded_proto $insecure {
    default 1;
    https   0;
}

server {
    ...
    if ($insecure) {
        return 301 https://$host$request_uri;
    }
    ...
}