LINUX.ORG.RU
ФорумAdmin

nginx и вездесущие Рег.Выражения. Rewrite и исключения.

 


0

1

Добрый день уважаемые.

Ни как не могу разобраться с nginx. Задача проста вроде бы.

По наброску конфига станет ясно чего добиваюсь:

server {
    listen 443 ssl;
    server_name  test.ru;

location /db/prod/cons_(.*)$ {
    if ($uri != $scheme://$server_name/db/prod/cons_(one$|two$) {
    rewrite ^/ $scheme://$server_name/error.html;
    }

    proxy_pass http://localhost:8080;
    }
}

Разьясню: если запрос не равен строго указанным папкам (one$|two$), то он реврайтит на еррор. Если запрос на них - отправляется на сервер в 8080.

запрос test.ru/db/prod/cons_onee тоже должен на еррор.

Как я только не эксперементировал. То location не цепляет, то реврайт не работает. if - вообще не смог добиться что бы отрабатывал.

Укажите на ошибки пожалуйста. На литературу по теме. Буду очень благодарен за любые отзывы.

Спасибо за внимание.

пара ссылок по которым строил эти суждения:

http://docs.mirocow.com/doku.php?id=nginx:%D0%B2%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_nginx
https://nginx.org/ru/docs/http/ngx_http_rewrite_module.html#if
http://itzx.ru/linux/derektiva-nginx-location-s-primerami


Сделай локейшны для «one» и «two» с proxy_pass, и локейшн для «/» с rewrite ^ /error.html break;. Не забудь добавить локейшн для error.html чтоб не попасть в цикл для реврайта.

micronekodesu ★★★
()
Ответ на: комментарий от micronekodesu

Спасибо за ответ быстрый.

Хорошо. Делаю location для «one»«two» и еррор.

Сайт очень большой. Я не могу / отправить на error. Мне нужно отобрать все запросы /db/prod/cons_ (кроме «one» и «two») для редиректа на еррор.

как это сделать правильно? прямо в поле location? а как?

Или есть варианты свалить всё в location /db/prod/cons_(.*)$ а там разобраться?

ishk0
() автор топика
Ответ на: комментарий от ishk0

Прошу плюсом по рег.выражениям для nginx скинуть ссылки на информацию. Я замечаю что привычные вещи тут не работают, и мне не понятно почему. (

Посылаю http://test.ru/db/prod/cons_1

И вот этот локейшн не работает как только не пробовал:

location /db/prod/cons_(.*)$    
location /db/prod/(cons_*)
location /db/prod/(cons_*)$
location /db/prod/(cons_\*)\$
location /db/prod/(cons_\*)\.$
Вот так работает «location /db/prod/» но мне обязятельно нужно отобрать именно cons.

Спасибо.

ishk0
() автор топика
Ответ на: комментарий от ishk0

Оттуда же:

A location can either be defined by a prefix string, or by a regular expression. Regular expressions are specified with the preceding “~*” modifier (for case-insensitive matching), or the “~” modifier (for case-sensitive matching).

deadNightTiger ★★★★★
()
Ответ на: комментарий от deadNightTiger

Да! Большое спасибо. Работает! завтра почитаю статьи уже с работы.

Доброго Вам воскресного вечера )

ishk0
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.