除了根页面外,强制所有页面都是ssl

时间:2016-05-12 02:50:02

标签: nginx

我目前正在使用

location / {
  if ($ssl_protocol = "")
  {
    rewrite ^ https://$host$request_uri? permanent;
  }
}

在我的nginx conf中。这成功强制所有页面都是https。但是,我希望根页面和只有根页面(针对index.htm)可选地为http,这样当用户转到http://myserver.com时,它将不会重定向到https。我怎么能这样做?

(我能够选择性地不在某些子目录上使用ssl,通过指定它们的位置,例如/ nossl将允许http://myserver.com/nossl不是ssl)。如果用户转到http://myserver.com/somepage.htm我希望它重定向。

1 个答案:

答案 0 :(得分:0)

您可以使用两种server阻止方法将用户重定向到https。然后,您就可以为索引页面及其资源(如果有)指定最小化http站点。像这样:

server {
    listen          80;
    root            /path/to/root;

    location / {
        return 301 https://$host$request_uri;
    }
    location = / {
        index index.htm;
    }
    location = /index.htm { }
    location /js { }
    location /css { }
    location /img { }
}

server {
    listen          443 ssl;
    root            /path/to/root;
    ...
}