Проверьте несколько пользовательских агентов в 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;
}
}
2 ответа
Решение
Если вы используете 0.9.6 или новее, вы можете использовать карту с регулярными выражениями (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;
}
}
}
Да, это был бы способ сделать это. Если ваши шаблоны будут оставаться такими простыми, вы можете объединить их, чтобы уменьшить объем сравнений выражений:
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;
}