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;
}

Але я просто не можу змусити його працювати! Якби хто міг придумати відповідь, я був би дуже вдячний

Відповіді:


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
Дуже дякую! Ця відповідь спрацювала для мене ідеально, і я не могла побажати більш ретельного. Я дуже вдячний, дякую!
користувач246341
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.