Redirection depuis vhost par défaut avec nginx

Le lun. 22 août 2011 par Kasey

Depuis quelque temps j'utilise nginx, que j'affectionne de plus en plus. Cependant, j'ai remarqué que dans une configuration mutualisée avec plusieurs vhost, le vhost servis par défaut est plus ou moins aléatoire.

Fichier de vhost

server {
        listen 80 default_server;
        server_name _;

        server_name_in_redirect off;

        rewrite ^(.*) http://mydomain.com permanent;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
}

Explications

On définit le vhost par défaut :

listen 80 default_server;

Ici, j'avoue avoir repompé sauvagement la documentation. Le server name doit être une sorte de wildcard. À moins que ce soit dans le but de remplir les logs avec une valeur facilement identifiable.

server_name _;

On ne passe pas le serveur name lors de la redirection. Présente peu d'intérêt, si ce n'avait été dans la configuration initiale, je n'aurais probablement pas mis en place la directive.

server_name_in_redirect off;

Élément important, ici on redirige toute les requetes depuis le vhost par défaut vers la racine d'un nom de domaine arbitraire. Cela dit il est possible de rediriger de manière plus intelligente les utilisateurs. C'est a vous de voir comment vous souhaitez gérer la redirection.

rewrite ^(.*) http://mydomain.com permanent;

Preuve de concept

Comme vous pouvez le voir ci-dessous la redirection est bien effective, le serveur répond bien HTTP/1.1 301 Moved Permanently ainsi que la nouvelle adresse de la page : Location: http://monsite.com

Ci-dessous, le log complet et verbeux ;)

curl -v 127.0.0.1
* About to connect() to 127.0.0.1 port 80 (#0)
*   Trying 127.0.0.1... connected
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.21.7 (x86_64-apple-darwin10.8.0) libcurl/7.21.7 OpenSSL/1.0.0d zlib/1.2.5 libidn/1.22
> Host: 127.0.0.1
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.0.5
< Date: Mon, 22 Aug 2011 12:29:09 GMT
< Content-Type: text/html
< Content-Length: 184
< Connection: keep-alive
< Location: http://mydomain.com
< 
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.0.5</center>
</body>
</html>
* Connection #0 to host 127.0.0.1 left intact
* Closing connection #0

Source