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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.