NGINX:将非www https重定向到https:// www

时间:2017-11-09 13:32:47

标签: ssl redirect nginx config

我按照这个回答https://stackoverflow.com/a/28068250/3108268但是它只从http重定向到https而非www重定向到www,但是如果我在https://example.com访问我的网站,我会得到'你的连接不安全'。

如何将其重定向到https://www

server{
  listen 443 ssl;
  server_name www.mydomain.com;
  root /www/mydomain.com/;

  ssl    on;
  ssl_certificate /ssl/domain.crt;
  ssl_certificate /ssl/domain.key;
  .
  . 
  .
}

server{
  listen 80;
  server_name www.mydomain.com mydomain.com;
  return 301 https://$server_name$request_uri;
}

server{
  listen 443;
  server_name mydomain.com;
  return 301 https://www.$server_name$request_uri;
} 

2 个答案:

答案 0 :(得分:2)

第三台服务器缺少SSL证书,这就是浏览器说连接不安全的原因。

用以下代码替换最后两台服务器:

 if(~some condition~){
            return <Text> New Label </Text>
        }else if(~some other condition~){  
            return <Text> Another Label </Text>
        }else{
            return <Text>label</Text>
        }        

答案 1 :(得分:1)

获得正确配置的一个好方法是为每个重定向使用新块,一个从http到https,一个到非www到www。

server {
    listen 80;
    server_name www.example.com example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl;
    ssl_certificate     /path/to/certificate.crt;
    ssl_certificate_key /path/to/private/key.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    server_name www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl;
    ssl_certificate     /path/to/certificate.crt;
    ssl_certificate_key /path/to/private/key.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    server_name example.com;

    # do the proper handling of the request
}