locations: Lua библиотека, реализующая соответствие URI в стиле nginx
Установка
Если вы еще не подписались на репозиторий RPM, зарегистрируйтесь. После этого вы можете продолжить с следующими шагами.
CentOS/RHEL 7 или Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-locations
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-locations
Чтобы использовать эту Lua библиотеку с NGINX, убедитесь, что установлен nginx-module-lua.
Этот документ описывает lua-resty-locations v0.2, выпущенную 31 августа 2017 года.
Lua библиотека, реализующая соответствие URI в стиле 'location' nginx.
Как и функция location в nginx. Поддерживает соответствие по самому длинному префиксу, соответствие по регулярным выражениям, нечувствительное к регистру соответствие по регулярным выражениям и точные совпадения.
- Сначала проверяются точные совпадения, поиск завершается при нахождении совпадения.
- Затем проверяются совпадения по префиксу, и запоминается самое длинное совпадение.
- Если совпадение по префиксу имеет модификатор
^~, поиск завершается. - Регулярные выражения проверяются в порядке.
- Если совпадений по регулярным выражениям нет, возвращается самое длинное совпадение по префиксу.
Обзор
init_by_lua_block {
local locations = require("resty.locations")
my_locs = locations:new()
-- Совпадение по префиксу
local ok, err = my_locs:set("/foo", "/foo")
-- точное совпадение
local ok, err = my_locs:set("/bar", "= /bar", "=")
-- совпадение по регулярному выражению
local ok, err = my_locs:set("^/baz", "~ ^/baz", "~")
-- нечувствительное к регистру совпадение по регулярному выражению
local ok, err = my_locs:set("^/qux", "~* ^/qux", "~*")
-- совпадение по префиксу, без проверки регулярных выражений
local ok, err = my_locs:set("/bazfoo", "^~ /bazfoo", "^~")
}
server {
listen 80 default_server;
server_name locations;
location / {
content_by_lua_block {
local val, err = my_locs:lookup(ngx.var.uri)
if val then
-- выполнить что-то на основе val
ngx.say("Совпадение: ", val)
else
if err then
ngx.log(ngx.ERR, err)
end
ngx.exit(404)
end
}
}
}
Методы
new
syntax: my_locations, err = locations:new(size?)
Создает новый экземпляр resty-locations с необязательным начальным размером.
set
syntax: ok, err = my_locations:set(key, value, modifier?)
Добавляет новый ключ с соответствующим значением и модификатором, по умолчанию - пустая строка для совпадения по префиксу. Ключи должны быть строками. Возвращает false и сообщение об ошибке в случае неудачи.
Модификаторы аналогичны функции location в nginx.
* ` (пустая строка) - Совпадение по префиксу
*=- Точное совпадение
*~- Совпадение по регулярному выражению
*~*- Нечувствительное к регистру совпадение по регулярному выражению
*^~` - Совпадение по префиксу, пропустить регулярные выражения
lookup
syntax: val, err = my_locations:lookup(uri)
Извлекает значение для предоставленного uri. Возвращает nil и сообщение об ошибке в случае неудачи.
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-locations.