Дано
location /nod32 {
root /var/www/ls /var/www/nod32/
eset_upd nod_upd
Задача - чтоб в зависимости от юзерагента подсовывалось либо один каталог, лмбо другой.if ($http_user_agent ~ .*BPC.[345].*) {
rewrite ^(.*)$ /eset_upd/$1 last;
}
if ($http_user_agent ~ .*BPC.2.*) {
rewrite ^(.*)$ /nod_upd/$1 last;
}типа такого я кое-как накарябал, но оно работает совсем не так, как хочется, оно идёт судя по логам куда-то в /html/eset_upd//nod32/update.ver, а надо что б в /nod32/eset_upd напимер откуда берётся этот /html и как правильно задать путь?
> надо что б в /nod32/eset_upd напимер откуда берётся этот /html и
> как правильно задать путь?Видимо, есть отдельный location для eset_upd или определена ранее директива root, которая и сказывается на location ~ /eset_upd.
Зачем два if?Лучше приведите конфиг целиком.
Но для примера (считаем, что вы сугубо сливаете статику):
server {
listen 80;
server_name <domain.name>;location /nod32 {
root /var/www/nod32/nod_upd/;if ($http_user_agent ~ "BPC\.[345]") {
root /var/www/nod32/eset_upd;
}
}
}
>> надо что б в /nod32/eset_upd напимер откуда берётся этот /html и
>> как правильно задать путь?
> Видимо, есть отдельный location для eset_upd или определена ранее директива root, которая
> и сказывается на location ~ /eset_upd.нет, никаких директив больше нет
> Зачем два if?
Потому что несколько условий будет, этими 2мя не ограничится.
> Лучше приведите конфиг целиком.Он уже весь тут, без указаний опций авторизации итп, т.е всего несколько строк
>[оверквотинг удален]
> server {
> listen 80;
> server_name <domain.name>;
> location /nod32 {
> root /var/www/nod32/nod_upd/;
> if ($http_user_agent ~ "BPC\.[345]") {
> root /var/www/nod32/eset_upd;
> }
> }
> }т.е без использования рерайта? Очень интересно, спасибо. Пока сделал без location /nod32, т.е клиент обращаться напрямую будет к сайту, а nginx, видя его юзерагент, напрявлять куда надо:
location / {
root /var/www/;
## тут опции авторизации и кастомные логи
if ($http_user_agent ~ .*BPC.[345].*) {
rewrite ^(.*) /nod32/eset_upd/$1 break;
}
if ($http_user_agent ~ .*BPC.2.*) {
rewrite ^(.*) /nod32/nod_upd/$1 break;
}Имхо, даже удобнее и красивее для пользователя.
Так работает. Ведь когда (если) я укажу index.html, это не помешает?
Всё же очень хочется разобраться с рерайтом, отчего клмент стучится во всякие /var/www/nod32/eset_upd//nod32/
Надо разобраться с регекспами, видимо. Как я понял, в конфиге nginx используются перловые регеспы? Не порекомендуете пособие for dummies?
>[оверквотинг удален]
> rewrite ^(.*) /nod32/eset_upd/$1 break;
>
> }
>
> if ($http_user_agent ~ .*BPC.2.*) {
>
> rewrite ^(.*) /nod32/nod_upd/$1 break;
>
> }
> Имхо, даже удобнее и красивее для пользователя.http://wiki.nginx.org/IfIsEvil
> Так работает. Ведь когда (если) я укажу index.html, это не помешает?
location / {
index index.html;
...
}> Всё же очень хочется разобраться с рерайтом, отчего клмент стучится во всякие
> /var/www/nod32/eset_upd//nod32/
> Надо разобраться с регекспами, видимо. Как я понял, в конфиге nginx используются
> перловые регеспы? Не порекомендуете пособие for dummies?rewrite лучше использовать в случае переопределения url, к примеру:
location ~* "/main.page" {
rewrite ^(.*)$ http://google.com last;
}В вашем (описанном) случае куда как разумнее было бы просто переопределять root директорию.
Как вариант сделать вовсе без IF инструкций, обозвав eset_upd и nod_upd согласно версий браузера, тогда конфиг nginx примет вид:
location / {
set $dir $http_user_agent;
root /var/www/$dir;try_files $uri $uri/ =404;
}Лучше сразу делать как правильно, а не как "красивее".