Nginx
Comments 8
0
Как будет выглядеть в мапе такая конструкция?
	location /eset_upd {
                if ($http_user_agent ~ .*BPC.[3].*) {
                rewrite ^(.*) /eset_upd/v3/update.ver break;
                }
                if ($http_user_agent ~ .*BPC.[4].*) {
                rewrite ^(.*) /eset_upd/v4/update.ver break;
                }
		if ($http_user_agent ~ .*BPC.[5].*) {
                rewrite ^(.*) /eset_upd/v5/update.ver break;
                }
                if ($http_user_agent ~ .*BPC.[6].*) {
                rewrite ^(.*) /eset_upd/v6/update.ver break;
                }
                if ($http_user_agent ~ .*BPC.[7].*) {
                rewrite ^(.*) /eset_upd/v7/update.ver break;
                }
0
Если я правильно все понял, то так:
location /eset_upd {
    map "$http_user_agent rewrite ^(.*) {
            ".*BPC.[3].*" "/eset_upd/v3/update.ver";
	    ".*BPC.[4].*" "/eset_upd/v4/update.ver";
	    ".*BPC.[5].*" "/eset_upd/v5/update.ver";
	    ".*BPC.[6].*" "/eset_upd/v6/update.ver";
	    ".*BPC.[7].*" "/eset_upd/v7/update.ver";
	}
}

Поправьте, если не так.
+1
Да, только map должен быть в секции http.
И после $http_user_agent нужно указать свою переменную, в которую и запишется выбранное значение.
+4
В секции http:
map $http_user_agent $go {
    "~BPC.\[(?P<1>[3-7])\]" $1;
}

В конфиге виртуального хоста:
location /eset_upd {
    if ($go) { rewrite ^ /eset_upd/v$go/update.ver break; }
}

Название переменной $go — от фонаря.
В регулярке необязательно указывать ".*" в начале и в конце.
(?P<1>[3-7]) — создается переменная «1», со значением, которое попадет в фильтр [3-7]
В результате в переменной $go будет номер версии
rewrite ^ — это короткая форма, когда из урла не нужно ничего брать.
UFO landed and left these words here
0
Возможно, над этой конструкцией нужно посидеть пару минут и обмозговать :)
Но это уже хитрая логика, которую нужно как-то описывать в конфиге.
Думаю, такая реализация через map читабельнее, чем 3-4 if в location :)
Прошу заметить, что такой подход рассчитан на масштабирование — если вам нужно будет добавить url, с map вам нужно добавить одну строчку.
Но может быть, это можно описать проще, буду рад узнать другой вариант.

0
Главное — не забывать про default, чтобы всегда было, куда направить запрос.

Подскажите пожалуйста, можно ли написать default так, чтобы запрос шел на случайный сервер а не всегда на один и тот же?

Only those users with full accounts are able to leave comments., please.