Pular para conteúdo

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.