web-dev-qa-db-ja.com

nginxでいくつかのユーザーエージェントを確認してください

ユーザーエージェントに応じて、トラフィックをいずれかのバックエンドにリダイレクトする必要があります。それは正しいことですか?

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

0.9.6以降を使用している場合は、正規表現で map を使用できます(1.0.4以降では、〜の代わりに〜*を使用して、大文字と小文字を区別しない式を使用できます)。

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

うん、それはそれを行う方法だろう。パターンが単純なままである場合は、パターンを組み合わせて式の比較の量を減らすことができます。

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;
}
1
Shane Madden