Rss

Réécriture HTTP vers HTTPS pour ownCloud et nginx

Voici une manière de mettre en place sur un serveur nginx une sécurisation via HTTPS de l’authentification à ownCloud ; en clair : utiliser le site en HTTP sauf pour la phase de login.

Dans la configuration de l’hôte fournissant le service en HTTP, le fichier /etc/nginx/sites-enabled/owncloud dans mon cas, on ajoute les directives suivantes :

if ($request_uri ~ ^/$) {
	rewrite ^ https://$server_name/index.php permanent;
}
if ($request_uri ~ ^/index.php$) {
	rewrite ^ https://$server_name$request_uri? permanent;
}

Ceci étant valable pour un ownCloud installé à la racine du site, il faut sinon bien évidemment adapter l’expression régulière.

Voici ce que font ces blocs de config :

  • le premier bloc sert à rediriger l’URL « / » en https://[le nom du serveur]/index.php
  • le second bloc sert à rediriger l’URL « /index.php » vers son équivalent https

On peut remarquer que les règles rewrite ne sont pas évidentes et sont même un piège classique de nginx… On peut aussi jeter un œil à la page Useful Rewrites for Nginx pour des exemples concrets et des infos pratiques à ce sujet.

Si vous voulez uniquement forcer l’usage du HTTPS systématique, ces règles suffisent, par contre, si vous souhaitez être redirigé en HTTP une fois la phase de login passée et ne laissez que celle-ci en HTTPS, il faut alors ajouter à la configuration de l’hôte HTTPS, le fichier /etc/nginx/sites-enabled/owncloud-https pour moi :

if ($request_uri !~ ^/index.php$) {
	rewrite ^ http://$host$request_uri permanent;
}

qui va tout bêtement tester l’URL et rediriger en HTTP si celle-ci n’est pas équivalente à « /index.php ».

Finalement c’était pas si compliqué 😉

Comments are closed.