У нас есть балансирующий прокси NginX перед нашим веб-приложением. К сожалению, пока не хватает ресурсов разработки для поддержки устаревших браузеров :( Мы хотим перенаправить участников нашего веб-проекта на / устаревший страницу данными пользовательского агента своего браузера, например (https://www.in2circle.com/outdated). По какой-то причине мы не хотим загружать серверную часть с логикой анализа содержимого User-Agent. Я слышал, что с NginX это легко сделать http://nginx.org/en/docs/http/ngx_http_map_module.html Если кто-то так делал, не могли бы вы помочь мне с примерами и пояснениями, пожалуйста!
Следующее решение работает довольно хорошо, и это именно то, что я хотел:
map $http_user_agent $outdated {
default 0;
"~MSIE [1-9]\." 1;
"~Mozilla.*Firefox/[1-9]\." 1;
"~Mozilla.*Firefox/[0-2][0-9]\." 1;
"~Mozilla.*Firefox/3[0-1]\." 1;
"~Opera.*Version/[0-9]\." 1;
"~Opera.*Version/[0-1][0-9]\." 1;
"~Opera.*Version/2[0-1]\." 1;
"~AppleWebKit.*Version/[0-6]\..*Safari" 1;
"~Chrome/[0-9]\." 1;
"~Chrome/[0-2][0-9]\." 1;
"~Chrome/3[0-3]\." 1;
}
if ($outdated = 1){
rewrite ^ /outdated redirect;
}
Спасибо всем за помощь / ответы.
Достаточно простого теста:
location / {
if ($http_user_agent ~ "MSIE 6.0" ) {
set $browser-version outdated;
}
if ($http_user_agent ~ "MSIE 7.0" ) {
set $browser-version outdated;
}
if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino") {
set $browser-version mobile;
}
if ( $uri ~ ^/(images|favicon\.ico) ) {
set $browser-version independent;
}
if ($browser-version = outdated) {
rewrite ^ /outdated/index.html break;
}
if ($browser-version = mobile) {
rewrite ^ /mobile/index.html break;
}
}