web-dev-qa-db-fra.com

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

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;
}
9
user421936

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

Vous pouvez utiliser if dans 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 utiliser if dans location car cela peut ne pas fonctionner comme vous le souhaitez (voir If Is Evil ).

9
Esa Jokinen

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 bloc server 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 diffuser un contenu différent, rediriger vers différents chemins, etc., selon les parties de la demande comme l'agent utilisateur, cela est possible, par exemple avec http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

3
Stefan Moch