The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Один url в location и два бэкенда, !*! hd, 22-Июн-15, 16:54  [смотреть все]
Здравствуйте.

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

location /url/aaa {
  proxy_pass backend1;
}

location /url {
  proxy_pass backend2;
}

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

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

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

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

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

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

  • Один url в location и два бэкенда, !*! eRIC, 20:16 , 22-Июн-15 (2)
    > Здравствуйте.
    > Пытаюсь сделать что-то такое:
    > 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;
    }

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

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

      • Один url в location и два бэкенда, !*! eRIC, 21:37 , 22-Июн-15 (4) –2
        >>> Но запросы все время попадают на 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

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

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

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

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

        • Один url в location и два бэкенда, !*! erera22, 12:16 , 23-Июн-15 (6) –1
          >[оверквотинг удален]
          >>>> т.к. еще бывает /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

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

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

            вот почему:

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

                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";
            }


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

            • Один url в location и два бэкенда, !*! PavelR, 07:11 , 24-Июн-15 (9)
              > Какой будет вывод? Правильно: 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; }

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

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




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

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