nginx/1.17.10

При использовании регулярных выражений в map обнуляются выделения уровня
location, даже в случае, если в выражениях map не используются выделения.

https://nginx.org/ru/docs/http/ngx_http_map_module.html

> Регулярное выражение может содержать именованные и позиционные выделения,
которые могут затем использоваться в других директивах совместно с
результирующей переменной.

-------------------------------------------------

map $uri $suffix {
        '~*.' '';
}

…

server {
        …

        location ~* /test/(.+) {
                # try_files $uri @blank;           # non empty
                try_files $uri$suffix $uri @blank; # empty
        }

        location @blank {
                default_type 'text/plain';

                return 200 '$1';
        }
}

-------------------------------------------------

Обращаемся к /test/123 — получаем пустой ответ.
Стоит убрать $uri$suffix из try_files — получаем «123».
Обойти можно, используя именованные выделения в location.

Из формулировки в документации складывается ощущение, что значения
позиционных выделений location'а будут переопределены если они используются
в map.
Но если их в map нет, странно получать пустые значения.

Я неправильно понимаю документацию или это ошибка?

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,288093,288093#msg-288093

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить