Saltar a contenido

locations: biblioteca Lua que implementa la coincidencia de URI de ubicación al estilo de nginx

Instalación

Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.

CentOS/RHEL 7 o 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

Para usar esta biblioteca Lua con NGINX, asegúrate de que nginx-module-lua esté instalado.

Este documento describe lua-resty-locations v0.2 lanzado el 31 de agosto de 2017.


Biblioteca Lua que implementa la coincidencia de URI 'location' al estilo de nginx.

Como la característica de location de nginx.
Soporta coincidencias de prefijo más largo, coincidencias de regex, coincidencias de regex sin distinción entre mayúsculas y minúsculas y coincidencias exactas.

  • Las coincidencias exactas se verifican primero, la búsqueda se detiene al encontrar una coincidencia.
  • Luego se verifican las coincidencias de prefijo y se recuerda la coincidencia más larga.
  • Si la coincidencia de prefijo tiene el modificador ^~, la búsqueda se detiene.
  • Las regex se verifican en orden.
  • Si no hay coincidencia de regex, se devuelve el prefijo más largo.

Descripción general

init_by_lua_block {
        local locations = require("resty.locations")
        my_locs = locations:new()

        -- Coincidencia de prefijo
        local ok, err = my_locs:set("/foo", "/foo")

        -- coincidencia exacta
        local ok, err = my_locs:set("/bar", "= /bar", "=")

        -- coincidencia de regex
        local ok, err = my_locs:set("^/baz", "~ ^/baz", "~")

        -- coincidencia de regex sin distinción entre mayúsculas y minúsculas
        local ok, err = my_locs:set("^/qux", "~* ^/qux", "~*")

        -- coincidencia de prefijo, sin verificación de regex
        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
                -- hacer algo basado en val
                ngx.say("Coincidencia: ", val)
            else
                if err then
                    ngx.log(ngx.ERR, err)
                end
                ngx.exit(404)
            end
        }
    }
}

Métodos

new

syntax: my_locations, err = locations:new(size?)

Crea una nueva instancia de resty-locations con un tamaño inicial opcional.

set

syntax: ok, err = my_locations:set(key, value, modifier?)

Agrega una nueva clave con el valor y modificador asociados, el valor predeterminado es una cadena vacía para coincidencia de prefijo.
Las claves deben ser cadenas.
Devuelve falso y un mensaje de error en caso de fallo.

Los modificadores son como la característica de ubicación de nginx. * ` (cadena vacía) - Coincidencia de prefijo *=- Coincidencia exacta *~- Coincidencia de regex *~*- Coincidencia de regex sin distinción entre mayúsculas y minúsculas *^~` - Coincidencia de prefijo, omitir regex

lookup

syntax: val, err = my_locations:lookup(uri)

Recupera el valor para la URI proporcionada.
Devuelve nil y un mensaje de error en caso de fallo.

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-locations.