在nginx中检查几个用户代理

我需要根据用户代理将stream量redirect到一个后端或另一个后端。 这是正确的事情吗?

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

如果您使用0.9.6或更高版本,则可以使用具有正则expression式的映射 (1.0.4或更高版本可以使用不区分大小写的expression式来使用〜*而不是〜):

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

是的,那就是做这件事的方法。 如果您的模式将保持简单,您可以将它们组合起来以减lessexpression式比较的数量:

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