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.