Перейти к содержанию

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.