238 votes

Comment forcer ou rediriger vers SSL dans nginx ?

J'ai une page d'inscription sur un sous-domaine : https://signup.example.com

Il ne devrait être accessible que via HTTPS, mais j'ai peur que les gens tombent dessus via HTTP et obtiennent un message 404.

Mon bloc html/serveur dans nginx ressemble à ceci :

html {
  server {
    listen 443;
    server_name signup.example.com;

    ssl                        on;
    ssl_certificate        /path/to/my/cert;
    ssl_certificate_key  /path/to/my/key;

    ssl_session_timeout 30m;

    location / {
      root /path/to/my/rails/app/public;
      index index.html;
        passenger_enabled on;
    }
  }
}

Qu'est-ce que je peux ajouter pour que les gens qui vont à http://signup.example.com sont redirigés vers https://signup.example.com ? (Pour info, je sais qu'il existe des plugins Rails qui peuvent forcer les SSL mais j'espérais éviter cela)

2voto

stamster Points 180

Je pense que c'est la solution la plus simple. Il s'agit de forcer le trafic non-HTTPS et non-WWW à utiliser HTTPS et www uniquement.

server {
    listen 80;
    listen 443 ssl;

    server_name domain.tld www.domain.tld;

    # global HTTP handler
    if ($scheme = http) {
        return 301 https://www.domain.tld$request_uri;
    }

    # global non-WWW HTTPS handler
    if ($http_host = domain.tld) {
        return 303 https://www.domain.tld$request_uri;
    }
}

EDIT - Avril 2018 : La solution sans les IF se trouve dans mon post ici : https://stackoverflow.com/a/36777526/6076984

1voto

Caner SAYGIN Points 111
server {
    listen x.x.x.x:80;

    server_name domain.tld;
    server_name www.domian.tld;
    server_name ipv4.domain.tld;

    rewrite     ^   https://$server_name$request_uri? permanent;
}

Je pense que cela fonctionne mieux. x.x.x.x fait référence à l'IP de votre serveur. Si vous travaillez avec Plesk 12, vous pouvez le faire en modifiant le fichier "nginx.conf" dans le répertoire "/var/www/vhosts/system/domain.tld/conf" pour le domaine que vous souhaitez. N'oubliez pas de redémarrer le service nginx après avoir enregistré la configuration.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X