web-dev-qa-db-fra.com

nginx: 301 redirection vers des URL SSL non-www sur default_server

Mon objectif est que nginx renvoie principalement une vérification de toutes les URL demandées commençant par http:// et/ou contenant //www., et 301 les redirigeant vers l'URL où //www. est remplacé par // et http:// remplacé par https://.

En bref, toutes les demandes, le cas échéant, à rediriger vers leur version SSL non-www, afin que tous les autres serveurs autres que les serveurs par défaut, servant de proxy inverse pour des domaines spécifiques, obtiennent toujours toujours https, non-www. demandes.

Comment puis-je faire cela?

2
Marko36

Le serveur http ne nécessitant pas de certificat spécifique, tous les domaines peuvent être redirigés vers https non-www avec un seul bloc server.

Par exemple:

server {
    listen 80;
    server_name ~^(www\.)?(?<domain>.+)$;
    return 301 https://$domain$request_uri;
}

Voir ce document pour plus.


Les serveurs https nécessitent probablement un certificat spécifique pour chaque domaine. Pour rediriger de www en non-www, un certificat spécifique doit être valide pour les deux variantes de nom. Vous devez utiliser deux blocs server pour chaque domaine spécifique, l'un existant et l'autre pour effectuer la redirection.

Par exemple:

server {
    listen 443 ssl;
    server_name www.example.com;

    ssl_certificate     /path/to/example.com.crt;
    ssl_certificate_key /path/to/example.com.key;

    return 301 https://example.com$request_uri;
}
server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate     /path/to/example.com.crt;
    ssl_certificate_key /path/to/example.com.key;

    ... this is the existing server block for this domain ...
}

Voir ce document pour plus.

3
Richard Smith