Nginx - Rediriger les requêtes en HTTP vers HTTPS

par Korben -

Si vous utilisez Nginx en reverse proxy et que vous cherchez la méthode pour rediriger de manière permanente (en 301) tout le trafic arrivant sur le HTTP vers du HTTPS pour apporter confort, sécurité et volupté à vos visiteurs, voici comment faire…

Ouvrez votre nginx.conf (qui se trouve surement dans un répertoire comme /etc/nginx/)

nano nginx.conf

Et faites en sorte d’y placer la ligne de reécriture mise en gras ci-dessous, dans la section réservée à la config HTTP. Les autres sections sont dédiées au HTTPS et à la config SSL.

## le serveur http sur le port 80 server { listen 1.2.3.4:80 default; server_name example.com www.example.com; ## Redirige le HTTP vers le HTTPS ## <strong>return 301 https://$server_name$request_uri;</strong> } ## Le serveur https sur le port 443. N'oubliez pas vote config SSL### server { access_log logs/example.com/ssl_access.log main; error_log logs/example.com/ssl_error.log; index index.html; root /usr/local/nginx/html; ## Début de la config SSL ## listen 1.2.3.4:443 ssl; server_name example.com www.example.com; fastcgi_param HTTPS on; ## Redirection de l url avec www vers une url sans www if ($host = 'www.example.com' ) { rewrite ^/(.*)$ https://example.com/$1 permanent; } ### config SSL - A vous de jouer ### ssl_certificate ssl/example.com/example.com_combined.crt; ssl_certificate_key ssl/example.com/example.com.key_without_password; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers RC4:HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; keepalive_timeout 70; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ## PROXY location / { add_header Front-End-Https on; add_header Cache-Control "public, must-revalidate"; add_header Strict-Transport-Security "max-age=2592000; includeSubdomains"; proxy_pass http://exampleproxy; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

Et voilà… Le tour est joué. Sauvegardez le fichier et relancez nginx

nginx -s reload

Pour vérifier que tout fonctionne correctement, allez faire un tour sur la version HTTP de votre site. Si vous êtes rebasculé automatiquement sur la version en HTTPS et que tout fonctionne, vous avez réussi comme un ninja des bois !

Source