locations: biblioteca Lua implementando correspondência de URI de localização no estilo nginx
Instalação
Se você ainda não configurou a assinatura do repositório RPM, inscreva-se. Em seguida, você pode prosseguir com os seguintes passos.
CentOS/RHEL 7 ou 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 com NGINX, certifique-se de que o nginx-module-lua esteja instalado.
Este documento descreve lua-resty-locations v0.2 lançado em 31 de agosto de 2017.
Biblioteca Lua implementando correspondência de URI 'location' no estilo nginx.
Como o recurso location do nginx.
Suporta correspondência de prefixo mais longo, correspondência regex, correspondência regex sem distinção entre maiúsculas e minúsculas e correspondências exatas.
- As correspondências exatas são verificadas primeiro, a busca retorna em caso de acerto.
- As correspondências de prefixo são então verificadas e a correspondência mais longa é lembrada.
- Se a correspondência de prefixo tiver o modificador
^~, a busca retorna. - As regex são verificadas na ordem.
- Se nenhuma correspondência regex for encontrada, o prefixo mais longo é retornado.
Visão Geral
init_by_lua_block {
local locations = require("resty.locations")
my_locs = locations:new()
-- Correspondência de prefixo
local ok, err = my_locs:set("/foo", "/foo")
-- correspondência exata
local ok, err = my_locs:set("/bar", "= /bar", "=")
-- correspondência regex
local ok, err = my_locs:set("^/baz", "~ ^/baz", "~")
-- correspondência regex sem distinção entre maiúsculas e minúsculas
local ok, err = my_locs:set("^/qux", "~* ^/qux", "~*")
-- correspondência de prefixo, sem verificação 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
-- faça algo com base em val
ngx.say("Correspondido: ", 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?)
Cria uma nova instância de resty-locations com um tamanho inicial opcional.
set
syntax: ok, err = my_locations:set(key, value, modifier?)
Adiciona uma nova chave com o valor e modificador associados, o padrão é uma string vazia para correspondência de prefixo.
As chaves devem ser strings.
Retorna falso e uma mensagem de erro em caso de falha.
Os modificadores são como o recurso de localização do nginx.
* ` (string vazia) - Correspondência de prefixo
*=- Correspondência exata
*~- Correspondência regex
*~*- Correspondência regex sem distinção entre maiúsculas e minúsculas
*^~` - Correspondência de prefixo, ignora regex
lookup
syntax: val, err = my_locations:lookup(uri)
Recupera o valor para a URI fornecida.
Retorna nil e uma mensagem de erro em caso de falha.
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório GitHub para nginx-module-locations.