Comment faire l'instruction if / else avec nginx conf?

9

est-il possible de faire quelque chose comme ça avec nginx?

if ( $http_user_agent = "wget" ){
   server {
      listen      11.11.11.11:1111;
      root        /website1/;
      server_name example.com www.example.com;
else 

   server {
      listen      22.22.22.22:22222;
      root        /website2/;
      server_name example2.com www.example2.com;
}
user421936
la source
Vous voudrez peut-être jeter un œil au module de carte .
gf_
2
Vous avez écrit quelque chose d'étrange et de tout à fait dénué de sens. Essayez de recommencer depuis le début, quel problème voulez-vous résoudre
Alexey Ten

Réponses:

9

Le module de réécriture Nginx a une ifdirective (voir la documentation liée pour des exemples), mais pas else. L'équivalent de elseserait tout ce qui n'est pas modifié avec unif .

Vous pouvez utiliser à l' ifintérieur d'un server { }mais pas l'inverse. Vous n'auriez même pas la condition comparée dans votre si avant une demande qui a déjà besoin du serveur. Là, vous ne pouvez diffuser du contenu que lorsque l'agent utilisateur est (ou n'est pas) wget.

Notez également que vous ne devez pas l'utiliser à l' ifintérieur locationcar cela pourrait ne pas fonctionner comme vous le souhaitez (voir Si c'est mal ).

Esa Jokinen
la source
3

Dans la forme donnée, cela ne fonctionnera pas: le test de l'agent utilisateur HTTP implique que la demande a déjà été reçue. Cela n'est possible que si un serverbloc a déjà été défini. Voulez-vous vraiment démarrer de nouveaux serveurs en fonction de la chaîne User-Agent d'une demande que vous avez reçue ailleurs?

Si vous souhaitez simplement servir un contenu différent, rediriger vers différents chemins, etc. en fonction de parties de la demande comme l'agent utilisateur, c'est possible, par exemple avec http://nginx.org/en/docs/http/ngx_http_rewrite_module. html

Stefan Moch
la source