Здравствуйте.Пытаюсь сделать что-то такое:
location /url/aaa {
proxy_pass backend1;
}location /url {
proxy_pass backend2;
}Но запросы все время попадают на backend2. Делать "location = /url/aaa" нельзя, т.к. еще бывает /url/aaa/xyz итд. Как подобное решается? Заранее спасибо.
> Здравствуйте.
> Пытаюсь сделать что-то такое:
> location /url/aaa {
> proxy_pass backend1;
> }
> location /url {
> proxy_pass backend2;
> }
>Как подобное решается?Так и решается, как вы написали.
> Но запросы все время попадают на backend2.
Значит вы что-то сделали не так, как написали.
Попробуйте сделать рестарт.
> Здравствуйте.
> Пытаюсь сделать что-то такое:
> 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;
}
>> Но запросы все время попадают на backend2. Делать "location = /url/aaa" нельзя,
>> т.к. еще бывает /url/aaa/xyz итд. Как подобное решается? Заранее спасибо.
> location ^~ /url/ {
> proxy_pass backend2;
> }
> location ^~ /url/aaa/ {
> proxy_pass backend1;
> }Вы читали документацию, зачем нужен модификатор ^~ ?
Нет, не читали? А зачем советуете?
>>> Но запросы все время попадают на 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
>> Вы читали документацию, зачем нужен модификатор ^~ ?
>> Нет, не читали? А зачем советуете?
> читано и это работает.Работает и без модификатора ^~.
>мне тыкнуть в доку? http://nginx.org/ru/docs/http/ngx_http_core_module.html
Тыкните, вам лишним не будет перечитать её и дать ответ на вопрос, зачем нужен модификатор ^~.
> Работает и без модификатора ^~.да работает, если URI будут примитивные как школьные уроки
>[оверквотинг удален]
>>>> т.к. еще бывает /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То, что это "работает", не значит, что стоит так делать в сознательном состоянии.
> То, что это "работает", не значит, что стоит так делать в сознательном
> состоянии.вот почему:
Проиллюстрируем вышесказанное примером:
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";
}
видимо автору пох* наше обсуждение :)
> Какой будет вывод? Правильно: 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; }
>[оверквотинг удален]
> {}
> ....
> }
> Хотя таки да, варианты с ^~ встречаются чаще, чем без модификатора.
> Отдельно хочу обратить внимание на то, что модификатором ^~ также отключаются "защитные"
> локейшны, если они есть:
> location ~ /\.ht { deny all;
> }
> location ~ /\.svn/ { deny all; }
> location ~ /\.git/ { deny all; }да верное замечание, потому что поиск по другим регуляркам не производится