Nginxはsslで古いドメインから新しいドメインにリダイレクトします


10

私はから私のサイトのドメイン名を変更しようとしていますhttps://www.myolddomain.se/https://www.mynewdomain.se/

問題は、私の古いドメインの場合、すべてのページでSSLを強制したため、googleおよび他のサイトのすべてのリンクがhttpsにリンクされていることです。httpsリンクから古いドメインにアクセスしようとすると、証明書エラーが発生します。だから私の質問は、httpsにリンクされているすべてのページを、このエラーが発生することなく、nginxの別のhttpsで保護されたドメインにリダイレクトするにはどうすればよいですか?

私はいくつかの調査を行ったところ、Webページをリダイレクトするためのこのソリューションを見つけました。これは現在、私の構成ファイルに挿入されています。それでも証明書エラーが発生します!

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アドレスを持つことができる場合

最も一般的なソリューションは、2つの異なる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 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.