当用户键入https://时,Nginx无法正确重定向

时间:2016-10-13 04:09:16

标签: ssl nginx ssl-certificate

我有几个重新定位,以确保所有域和变体都指向当前的主要位置:

#redirects www
server {
    server_name www.blah.net;
    return 301 https://blah.org$request_uri;
}

server {
    server_name www.blah.co;
    return 301 https://blah.org$request_uri;
}

#redirects co and net to org
server {
    server_name blah.co;
    return 301 https://blah.org$request_uri;
}

server {
    server_name blah.net;
    return 301 https://blah.org$request_uri;
}

#redirects all traffic to https
server {
    listen *:80 default_server;

    location / {
        return 301 https://$host$request_uri;
    }
}

#main server
server {
    listen *:443 ssl;
    ssl on;

    ssl_certificate /etc/letsencrypt/live/www.blah.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.blah.org/privkey.pem;

    root /home/blah/www;
    index index.html index.htm;

    server_name blah.org blah.co blah.net;
}

问题是我们的热门Google搜索结果有一个指向https://blah.co的链接,当您点击它时,它会出现证书错误。我了解问题所在,我根本不知道如何修复重定向,以便当有人点击包含https的链接或输入https://blah.co时,它会解析为https://blah.org

1 个答案:

答案 0 :(得分:0)

我觉得这样的事情会起作用。第一个块应该捕获任何非https://blah.org的流量,并重定向它。第二个服务器块只处理blah.org域。

# redirects all non-.org traffic to https
server {
    listen *:80 default_server;
    listen *:443 ssl;

    ssl_certificate /etc/letsencrypt/live/www.blah.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.blah.org/privkey.pem;

    server_name _;

    location / {
        return 301 https://blah.org$request_uri;
    }
}

#main server
server {
    listen *:443 ssl;
    ssl on;

    ssl_certificate /etc/letsencrypt/live/www.blah.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.blah.org/privkey.pem;

    root /home/blah/www;
    index index.html index.htm;

    server_name blah.org;
}