Nginx неправильно перенаправляет, когда пользователь вводит https://

#ssl #nginx #ssl-certificate

#ssl #nginx #ssl-сертификат

Вопрос:

У меня есть пара перенаправлений, чтобы убедиться, что все домены и варианты указывают на текущее основное местоположение:

 #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. Получите действительный сертификат для blah.co

2. @AlexeyTen Смысл в том, чтобы избежать этого — и перенаправить весь трафик на blah.org это единственный сайт, у которого есть действительный сертификат.

3. Смысл https в том, чтобы сделать невозможным избежать этого

Ответ №1:

Я думаю, что что-то подобное сработает. Первый блок должен перехватывать любой трафик, который не 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;
}
  

Комментарии:

1. Для этого все еще нужны действительные сертификаты

2.@AlexeyTen Я не спорю с вами, однако у меня есть обратная ситуация, работающая в производственной среде. Мы 301 перенаправляем весь non-https non-www трафик на domain.com , и у нас есть только подстановочный ssl-сертификат. Даже http://ip-address перенаправляет правильно.