Nginx перенаправить со старого домена на новый с помощью ssl

10

Я пытаюсь изменить доменное имя для моего сайта с https://www.myolddomain.se/наhttps://www.mynewdomain.se/

Проблема в том, что для моего старого домена я установил SSL на всех страницах, и поэтому все ссылки на Google и других сайтах связаны с https. Когда я пытаюсь посетить старый домен по ссылке https, я получаю ошибку сертификата. Поэтому мой вопрос: как я могу перенаправить все страницы, связанные с https, на другой защищенный домен https в nginx, не получая эту ошибку?

Я провел некоторое исследование и нашел это решение для перенаправления веб-страниц, которое теперь вставлено в мой файл конфигурации. Хотя я все еще получаю ошибку сертификата!

server {
        server_name .myolddomain.se;
        return 301 https://www.mynewdomain.se$request_uri;
}

Но я просто не могу заставить его работать! Если бы кто-нибудь мог придумать ответ, я был бы очень признателен

user246341
источник

Ответы:

11

Решение зависит от возможностей клиента, вашего бюджета и особенностей архитектуры.

1. Если оба домена размещены на одном IP-адресе и у вас не может быть другого:

Если клиент поддерживает расширение TLS SNI:

server {
    listen X.X.X.X:443 ssl;
    ssl_certificate /path/to/myolddomain.cert;
    ssl_certificate_key /path/to/myolddomain.key;
    server_name .myolddomain.se;
    return 301 https://www.mynewdomain.se$request_uri;
}


server {
    listen X.X.X.X:443 ssl;
    ssl_certificate /path/to/mynewdomain.cert;
    ssl_certificate_key /path/to/mynewdomain.key;
    server_name .mynewdomain.se;

    [ ... ] # Your stuff

}

Если он не понимает расширение x509, SubjectAltNameи вы можете позволить себе создать новый сертификат, то запросите уникальный сертификат для обоих доменов. Конфигурация должна выглядеть так:

server {
    listen X.X.X.X:443 ssl default_server;
    ssl_certificate /path/to/domain.cert;
    ssl_certificate_key /path/to/domain.key;
    server_name _;
}

server {
    listen X.X.X.X:443;
    server_name .myolddomain.se;
    return 301 https://www.mynewdomain.se$request_uri;
}


server {
    listen X.X.X.X:443;
    server_name .mynewdomain.se;

    [ ... ] # Your stuff

}

2. Если каждый домен находится на отдельном IP-адресе или если он находится на том же самом, но вы можете иметь другой

Наиболее универсальное решение - прослушивание двух разных IP-адресов (обычно дополнительный публичный IP-адрес «просто» можно приобрести у вашего хостинг-провайдера):

server {
    listen X.X.X.X:443 ssl;
    ssl_certificate /path/to/myolddomain.cert;
    ssl_certificate_key /path/to/myolddomain.key;
    server_name .myolddomain.se;
    return 301 https://www.mynewdomain.se$request_uri;
}

server {
    listen Y.Y.Y.Y:443 ssl;
    ssl_certificate /path/to/mynewdomain.cert;
    ssl_certificate_key /path/to/mynewdomain.key;
    server_name .mynewdomain.se;

    [ ... ] # Your stuff

}
Ксавье Лукас
источник
1
Спасибо огромное! Этот ответ отлично сработал для меня, и я не мог бы пожелать более тщательного ответа. Я очень благодарен, спасибо!
user246341