verificar vários agente do usuário no nginx

3

Eu preciso redirecionar o tráfego para um backend ou outro de acordo com o user-agent. Essa é a coisa certa a fazer?

server {
    listen      80;
    server_name my_domain.com;

    if ($http_user_agent ~ iPhone ) {
        rewrite     ^(.*)   https://m.domain1.com$1 permanent;
    }
    if ($http_user_agent ~ Android ) {
        rewrite     ^(.*)   https://m.domain1.com$1 permanent;
    }
    if ($http_user_agent ~ MSIE ) {
        rewrite     ^(.*)   https://domain2.com$1 permanent;
    }
    if ($http_user_agent ~ Mozilla ) {
        rewrite     ^(.*)   https://domain2.com$1 permanent;
    }
}
    
por Luc 28.09.2011 / 21:37

2 respostas

10

Se estiver usando a versão 0.9.6 ou posterior, você pode usar um mapa com expressões regulares (1.0.4 ou mais tarde pode usar expressões que não diferenciam maiúsculas de minúsculas usando ~ * em vez de apenas ~):

http {
  map $http_user_agent $ua_redirect {
    default '';
    ~(iPhone|Android) m.domain1.com;
    ~(MSIE|Mozilla) domain2.com;
  }

  server {
    if ($ua_redirect != '') {
      rewrite ^ https://$ua_redirect$request_uri? permanent;
    }
  }
}
    
por 28.09.2011 / 21:53
1

Sim, essa seria a maneira de fazer isso. Se seus padrões forem tão simples, provavelmente você poderá combiná-los para reduzir o volume de comparações de expressão:

if ($http_user_agent ~ (iPhone|Android) ) {
    rewrite     ^(.*)   https://m.domain1.com$1 permanent;
}
if ($http_user_agent ~ (MSIE|Mozilla) ) {
    rewrite     ^(.*)   https://domain2.com$1 permanent;
}
    
por 28.09.2011 / 21:46