Redirection des Requêtes http vers https
Bien souvent, on souhaite disposer d’un serveur web exclusivement en https. Se pose alors le problème de gérer les requêtes http, généralement, on préfère une redirection en https.
Méthode Classique
Elle consiste à configurer un » server block » (*) sur le port 80 dont l’unique fonction et de renvoyer les éventuelles requêtes http sur le serveur https.
1 2 3 4 5 | server { listen 80; server_name www.domaine.com; return 301 https://$server_name$request_uri; } |
Cette méthode est propre et le code 301 indique au navigateur que la redirection est permanente. Le navigateur du client n’y reviendra plus.
Méthode avec un seul Server Block
Maintenant, il arrive qu’on ne veuille pas déclarer un premier server block sur le port 80. Le cas typique est celui d’un serveur web https sur un port non-standard à des fins d’administration ou autres. Mais si on oublie le https:// dans la barre de son navigateur, on obtient une erreur 497 :
400 Bad Request
On souhaiterait donc que
http://www.domaine.com:25000/
redirige vers https://www.domaine.com:25000/
. Une solution propre consiste à jouer avec la page d’erreur renvoyée par Nginx :1 2 3 4 5 6 7 8 9 10 11 12 13 | server { listen 25000 ssl; server_name www.domaine.com; # Les erreurs 497 (requête http) renverront la même requête en https error_page 497 https://$server_name:$server_port$request_uri; # Configuration SSL ssl_certificate /var/www/.../server.crt; ssl_certificate_key /var/www/.../server.key; include /etc/nginx/ssl_params; [...] |
La ligne 6 indique à Nginx que lorsqu’il voit arriver une requête http, la page d’erreur correspondante, c’est à dire 497, est la même url requise par le client mais en https. Ce dernier est donc alors redirigé comme il faut.
Voilà, c’est aussi simple que ça!
Pingback: Force SSL Nginx et Esquiver la 400 Bad Request – Thxer