2017-09-27 1 views
0

J'ai 2 serveurs Nginx servant des fichiers statiques provenant de 2 sous-domaines différents d'un domaine parent inconnu, disons <env>.foo.<domain>.com et <env>.bar.<domain>.com.Nginx permanent rediriger vers une URL différente pour certains sous-répertoires

Je veux configurer le serveur nginx pour <env>.foo.<domain>.com de sorte que si l'URL a le sous-répertoire cat ou dog je veux rediriger vers <env>.bar.<domain>.com/<subdirectory>/<rest of url>.

E.g.

http://dev.foo.mydomain1.com/cat/22 -> http://dev.bar.mydomain1.com/cat/22 
http://dev.foo.mydomain1.com/dog/22 -> http://dev.bar.mydomain2.com/dog/22 
http://dev.foo.mydomain2.com/dog/22 -> http://dev.bar.mydomain2.com/dog/22 
http://dev.foo.mydomain1.com/bird/22 -> [no redirect] 

Les <env> et <domain> parties du domaine sont dynamiques en fonction de l'environnement dans lequel les serveurs sont déployées, mais sont communs entre les 2 cases nginx.

je l'imagine être quelque chose comme:

server { 
    location ??? /(cat|dog) { 
    return 301 $scheme://???/$1$is_args$query_string; 
    } 
} 

Mais mes compétences nginx sont pas tout à fait ...

+0

'dev.foo.mydomain2.com' et' dev.foo.mydomain1.com' sont gérées sur le même nginx ou différent nginx? font-ils également écouter dans les mêmes blocs de serveur ou différents blocs de serveur? –

+0

même nginx, mais déployé dans différents environnements. Par exemple. staging.foo.domain1.com, demo.foo.domain2.com – harryg

+0

Les sous-domaines 'foo' et' bar' se trouvent sur des boîtes nginx entièrement distinctes – harryg

Répondre

0

Qu'est-ce que vous pouvez faire est ci-dessous

http { 

map $http_host $host_to_send_to { 
    default $http_host; 
    dev.foo.mydomain1.com dev.bar.mydomain1.com; 
    dev.foo.mydomain2.com dev.bar.mydomain2.com; 
} 

server { 
    server_name dev.foo.mydomain1.com; 
    location /(cat|dog) { 
    return 301 $scheme://$host_to_send_to$request_uri$is_args$query_string; 
    } 
} 
} 

Vous devrez ajoutez-le à chaque bloc de serveur qui doit gérer la redirection.

Edit-1: nom d'hôte dynamique de manutention

Vous pouvez manipuler les noms d'hôte dynamique également des modèles de re utilisateur et les groupes

map $hostsname $host_to_send_to { 
    default $http_host; 
    ~(.*).foo.mydomain1.com $1.bar.mydomain1.com; 
    ~(.*).foo.mydomain2.com $1.bar.mydomain2.com; 
} 
+0

que se passe-t-il si je ne sais pas quel est le 'server_name' car la même configuration est le déploiement à plusieurs environnements? C'est à dire. il devrait fonctionner indépendamment du domaine et utiliser dynamiquement les parties du domaine à partir de la requête, à l'exception des parties 'foo' /' bar' qui sont remplacées – harryg

+0

@harryg, solution affichée pour cela aussi –