The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Один url в location и два бэкенда"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (nginx)
Изначальное сообщение [ Отслеживать ]

"Один url в location и два бэкенда"  +/
Сообщение от hd (??) on 22-Июн-15, 16:54 
Здравствуйте.

Пытаюсь сделать что-то такое:

location /url/aaa {
  proxy_pass backend1;
}

location /url {
  proxy_pass backend2;
}

Но запросы все время попадают на backend2. Делать "location = /url/aaa" нельзя, т.к. еще бывает /url/aaa/xyz итд. Как подобное решается? Заранее спасибо.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Один url в location и два бэкенда"  +/
Сообщение от PavelR (??) on 22-Июн-15, 19:44 
> Здравствуйте.
> Пытаюсь сделать что-то такое:
> location /url/aaa {
>   proxy_pass backend1;
> }
> location /url {
>   proxy_pass backend2;
> }
>Как подобное решается?

Так и решается, как вы написали.

> Но запросы все время попадают на backend2.

Значит вы что-то сделали не так, как написали.

Попробуйте сделать рестарт.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Один url в location и два бэкенда"  +/
Сообщение от eRIC (ok) on 22-Июн-15, 20:16 
> Здравствуйте.
> Пытаюсь сделать что-то такое:
> location /url/aaa {
>   proxy_pass backend1;
> }
> location /url {
>   proxy_pass backend2;
> }
> Но запросы все время попадают на backend2. Делать "location = /url/aaa" нельзя,
> т.к. еще бывает /url/aaa/xyz итд. Как подобное решается? Заранее спасибо.

location ^~ /url/ {
  proxy_pass backend2;
}

location ^~ /url/aaa/ {
  proxy_pass backend1;
}

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Один url в location и два бэкенда"  +/
Сообщение от PavelR (??) on 22-Июн-15, 20:27 
>> Но запросы все время попадают на backend2. Делать "location = /url/aaa" нельзя,
>> т.к. еще бывает /url/aaa/xyz итд. Как подобное решается? Заранее спасибо.
> location ^~ /url/ {
>   proxy_pass backend2;
> }
> location ^~ /url/aaa/ {
>   proxy_pass backend1;
> }

Вы читали документацию, зачем нужен модификатор ^~ ?
Нет, не читали? А зачем советуете?

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Один url в location и два бэкенда"  –2 +/
Сообщение от eRIC (ok) on 22-Июн-15, 21:37 
>>> Но запросы все время попадают на backend2. Делать "location = /url/aaa" нельзя,
>>> т.к. еще бывает /url/aaa/xyz итд. Как подобное решается? Заранее спасибо.
>> location ^~ /url/ {
>>   proxy_pass backend2;
>> }
>> location ^~ /url/aaa/ {
>>   proxy_pass backend1;
>> }
> Вы читали документацию, зачем нужен модификатор ^~ ?
> Нет, не читали? А зачем советуете?

читано и это работает. мне тыкнуть в доку? http://nginx.org/ru/docs/http/ngx_http_core_module.html

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Один url в location и два бэкенда"  +/
Сообщение от PavelR (??) on 22-Июн-15, 22:18 
>> Вы читали документацию, зачем нужен модификатор ^~ ?
>> Нет, не читали? А зачем советуете?
> читано и это работает.

Работает и без модификатора ^~.

>мне тыкнуть в доку? http://nginx.org/ru/docs/http/ngx_http_core_module.html

Тыкните, вам лишним не будет перечитать её и дать ответ на вопрос, зачем нужен модификатор ^~.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

8. "Один url в location и два бэкенда"  +/
Сообщение от eRIC (ok) on 23-Июн-15, 14:35 
> Работает и без модификатора ^~.

да работает, если URI будут примитивные как школьные уроки

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

6. "Один url в location и два бэкенда"  –1 +/
Сообщение от erera22 (ok) on 23-Июн-15, 12:16 
>[оверквотинг удален]
>>>> т.к. еще бывает /url/aaa/xyz итд. Как подобное решается? Заранее спасибо.
>>> location ^~ /url/ {
>>>   proxy_pass backend2;
>>> }
>>> location ^~ /url/aaa/ {
>>>   proxy_pass backend1;
>>> }
>> Вы читали документацию, зачем нужен модификатор ^~ ?
>> Нет, не читали? А зачем советуете?
> читано и это работает. мне тыкнуть в доку? http://nginx.org/ru/docs/http/ngx_http_core_module.html

То, что это "работает", не значит, что стоит так делать в сознательном состоянии.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Один url в location и два бэкенда"  +/
Сообщение от eRIC (ok) on 23-Июн-15, 14:31 
> То, что это "работает", не значит, что стоит так делать в сознательном
> состоянии.

вот почему:

Проиллюстрируем вышесказанное примером:

    location = / {
        [ конфигурация А ]
    }

    location / {
        [ конфигурация Б ]
    }

    location /documents/ {
        [ конфигурация В ]
    }

    location ^~ /images/ {
        [ конфигурация Г ]
    }

    location ~* \.(gif|jpg|jpeg)$ {
        [ конфигурация Д ]
    }

Для запроса “/” будет выбрана конфигурация А, для запроса “/index.html” — конфигурация Б, для запроса “/documents/document.html” — конфигурация В, для запроса “/images/1.gif” — конфигурация Г, а для запроса “/documents/1.jpg” — конфигурация Д.


Теперь представь запрос: http://dummy/url/aaa/site.aaa и следующий конфиг:

location /url/aaa {
echo "1 block";
}

location /url {
echo "2 block";
}

location ~* \.(url|aaa)$ {
echo "3 block";
}


Какой будет вывод? Правильно: 3 block

Но автор скажет, мля че за Х, когда он должен отрабатываться 1 block'ом, потому что это подзапросы /url/aaa/*

Ну теперь проверь этот конфиг:

location ^~ /url/aaa {
echo "1 block";
}

location ^~ /url {
echo "2 block";
}

location ~* \.(url|aaa)$ {
echo "3 block";
}


видимо автору пох* наше обсуждение :)

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

9. "Один url в location и два бэкенда"  +/
Сообщение от PavelR (??) on 24-Июн-15, 07:11 
> Какой будет вывод? Правильно: 3 block
> Но автор скажет, мля че за Х, когда он должен отрабатываться 1
> block'ом, потому что это подзапросы /url/aaa/*

Ну так ситуации разные бывают. Где-то должно отработать 1-м блоком, где-то 3-м.

практический пример 1, тут нужна ^~, т.к. это фактически две разных системы, разнесенные по URL:

server {

...

    root /var/lib/roundcube/;

    location / {
        index index.php;
    }

    ......

    location = /robots.txt {}
    location = /favicon.ico {}
    location ~* \.(gif|jpg|jpeg|bmp|js|json|exe|css|swf|mp3|mp4|avi|mkv|mov|png|ico|wav|wmv|wma|mpeg|rar|zip|mpg|flv|flac|fla|rm|asf|cur|pdf)$ {}


   location ^~ /postfixadmin/ {
        alias /usr/share/postfixadmin/;
        index index.php;

        location ~ \.php$ {
            fastcgi_pass ....;
            fastcgi_index index.php;
            include fastcgi_params;
        }
    }

....
}


практический пример 2, тут не нужна ^~, т.к. это тот же сайт, разнесенный на разные бекенды с общим каталогом статики


server {

...

    root /var/www/cool.site.example.net/;

    location / {
       proxy_pass upstream-user;
    }

    location /adminpanel/ {
       proxy_pass upstream-admin;
    }

    ......

    location = /robots.txt {}
    location = /favicon.ico {}
    location ~* \.(gif|jpg|jpeg|bmp|js|json|exe|css|swf|mp3|mp4|avi|mkv|mov|png|ico|wav|wmv|wma|mpeg|rar|zip|mpg|flv|flac|fla|rm|asf|cur|pdf)$ {}

....
}

Хотя таки да, варианты с ^~ встречаются чаще, чем без модификатора.
Отдельно хочу обратить внимание на то, что модификатором ^~ также отключаются "защитные" локейшны, если они есть:

    location ~ /\.ht  {  deny all; }
    location ~ /\.svn/ {  deny all; }
    location ~ /\.git/ {  deny all; }

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

10. "Один url в location и два бэкенда"  +/
Сообщение от eRIC (ok) on 24-Июн-15, 09:28 
>[оверквотинг удален]
> {}
> ....
> }
> Хотя таки да, варианты с ^~ встречаются чаще, чем без модификатора.
> Отдельно хочу обратить внимание на то, что модификатором ^~ также отключаются "защитные"
> локейшны, если они есть:
>     location ~ /\.ht  {  deny all;
> }
>     location ~ /\.svn/ {  deny all; }
>     location ~ /\.git/ {  deny all; }

да верное замечание, потому что поиск по другим регуляркам не производится

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру