Nginx将所有内容重定向到www https

时间:2018-11-28 06:40:44

标签: web nginx nginx-reverse-proxy no-www

我想将所有内容重定向到https://www

这是我的配置块,我在其中尝试将非www重定向到https,但不起作用。

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

    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;

    location /auth {
        ...
    }

    location / {
       ...
    }

    ssl_certificate /root/certs/fullchain.pem;
    ssl_certificate_key /root/certs/privkey.pem;

}

http://example.com出现404错误

https://example.com不会重定向到https://www

http://www.example.com重定向到https://www

https://www.example按原样

2 个答案:

答案 0 :(得分:2)

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

server {
    listen 443 ssl;
    server_name example.com 
    ssl_certificate Certificate/For/example.com/fullchain
    ssl_certificate_key Key/For/example.com/ 
    return 301 https://www.example.com$request_uri;
}

server {
    listen 443;
    server_name  www.example.com
    ssl_certificate Certificate/For/www.example.com/fullchain
    ssl_certificate_key Key/For/www.example.com/key

    //do whatever you want with your https://www.example.com connection

}   

请记住同时拥有两个证书,一个用于www,另一个没有,就像您将示例重定向到不带证书的www一样,这是不安全的步骤,并且会显示错误。

希望我能帮忙

答案 1 :(得分:1)

我认为您也应该为https服务器指定服务器名称:

server {
    server_name www.example.com
    listen 443 ssl;

    ...

    ssl_certificate /root/certs/fullchain.pem;
    ssl_certificate_key /root/certs/privkey.pem;

}

您还可以通过将http服务器合并为一个来简化http服务器:

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