Nginx redirect dari domain lama ke baru dengan ssl

10

Saya mencoba mengubah nama domain untuk situs saya dari https://www.myolddomain.se/menjadihttps://www.mynewdomain.se/

Masalahnya adalah bahwa untuk domain lama saya, saya memaksa SSL di semua halaman dan karenanya semua tautan di google dan situs lain terhubung dengan https. Ketika saya mencoba mengunjungi domain lama dari tautan https saya mendapatkan kesalahan sertifikat. Jadi pertanyaan saya adalah: bagaimana saya bisa mengalihkan semua halaman yang terhubung dengan https ke domain aman https lain, di nginx, tanpa mendapatkan kesalahan ini?

Saya melakukan riset dan menemukan solusi ini untuk mengarahkan ulang halaman web, yang sekarang dimasukkan dalam file konfigurasi saya. Meskipun saya masih mendapatkan kesalahan sertifikat!

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

Tapi saya tidak bisa membuatnya bekerja! Jika ada yang bisa memberikan jawaban, saya akan sangat berterima kasih

pengguna246341
sumber

Jawaban:

11

Solusinya tergantung pada kemampuan klien, anggaran Anda dan kekhususan arsitektur.

1. Jika kedua domain di-host pada alamat IP yang sama dan Anda tidak dapat memiliki yang lain:

Jika klien mendukung ekstensi 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

}

Jika tidak memahami ekstensi x509 SubjectAltNamedan Anda dapat membuat sertifikat baru, mintalah sertifikat unik untuk kedua domain. Konfigurasi akan terlihat seperti:

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. Jika setiap domain berada pada alamat IP yang berbeda atau jika itu sama tetapi Anda dapat memiliki yang lain

Solusi paling umum, dengarkan dua IP berbeda (biasanya IP publik tambahan adalah "cukup" pilihan untuk membeli di penyedia hosting Anda):

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

}
Xavier Lucas
sumber
1
Terima kasih banyak! Jawaban ini sangat cocok untuk saya, dan saya tidak bisa mengharapkan jawaban yang lebih menyeluruh. Saya sangat berterima kasih, terima kasih!
user246341