Redirection Nginx de l'ancien domaine vers le nouveau avec SSL

10

J'essaie de changer le nom de domaine de mon site de https://www.myolddomain.se/àhttps://www.mynewdomain.se/

Le problème est que pour mon ancien domaine, j'ai forcé SSL sur toutes les pages et donc tous les liens sur Google et d'autres sites sont liés avec https. Lorsque j'essaie de visiter l'ancien domaine à partir d'un lien https, j'obtiens une erreur de certificat. Donc, ma question est: comment puis-je rediriger toutes les pages liées avec https vers un autre domaine sécurisé https, dans nginx, sans obtenir cette erreur?

J'ai fait quelques recherches et trouvé cette solution pour rediriger les pages Web, qui est maintenant insérée dans mon fichier de configuration. Bien que j'obtienne toujours l'erreur de certificat!

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

Mais je n'arrive pas à le faire fonctionner! Si quelqu'un pouvait trouver une réponse, je vous serais très reconnaissant

user246341
la source

Réponses:

11

La solution dépend des capacités du client, de votre budget et des spécificités de l'architecture.

1. Si les deux domaines sont hébergés sur la même adresse IP et que vous ne pouvez pas en avoir une autre:

Si le client prend en charge l'extension 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

}

S'il ne comprend pas l'extension x509 SubjectAltNameet le comprend et que vous pouvez vous permettre de générer un nouveau certificat, demandez un certificat unique pour les deux domaines. La configuration devrait ressembler à:

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. Si chaque domaine est sur une adresse IP distincte ou si c'est la même mais que vous pouvez en avoir une autre

La solution la plus générique, écouter sur deux IP différentes (généralement une IP publique supplémentaire est "simplement" une option à acheter chez votre hébergeur):

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
la source
1
Merci beaucoup! Cette réponse a parfaitement fonctionné pour moi et je n'aurais pas pu souhaiter une réponse plus approfondie. Je suis très reconnaissant, merci!
user246341