Aller au contenu

locations: bibliothèque Lua implémentant le correspondance d'uri de style nginx

Installation

Si vous n'avez pas configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.

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

Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.

Ce document décrit lua-resty-locations v0.2 publié le 31 août 2017.


Bibliothèque Lua implémentant le correspondance d'uri 'location' de style nginx.

Comme la fonctionnalité location de nginx.
Prend en charge la correspondance de préfixe la plus longue, la correspondance regex, la correspondance regex insensible à la casse et les correspondances exactes.

  • Les correspondances exactes sont vérifiées en premier, la recherche retourne sur un succès.
  • Les correspondances de préfixe sont ensuite vérifiées et la correspondance la plus longue est mémorisée.
  • Si la correspondance de préfixe a le modificateur ^~, la recherche retourne.
  • Les regex sont vérifiées dans l'ordre.
  • Si aucune correspondance regex n'est trouvée, le préfixe le plus long est retourné.

Aperçu

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

        -- Correspondance de préfixe
        local ok, err = my_locs:set("/foo", "/foo")

        -- correspondance exacte
        local ok, err = my_locs:set("/bar", "= /bar", "=")

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

        -- correspondance regex insensible à la casse
        local ok, err = my_locs:set("^/qux", "~* ^/qux", "~*")

        -- correspondance de préfixe, sans vérification 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
                -- faire quelque chose en fonction de val
                ngx.say("Correspondance : ", val)
            else
                if err then
                    ngx.log(ngx.ERR, err)
                end
                ngx.exit(404)
            end
        }
    }
}

Méthodes

new

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

Crée une nouvelle instance de resty-locations avec une taille initiale optionnelle.

set

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

Ajoute une nouvelle clé avec la valeur et le modificateur associés, par défaut une chaîne vide pour la correspondance de préfixe.
Les clés doivent être des chaînes.
Retourne false et un message d'erreur en cas d'échec.

Les modificateurs sont comme la fonctionnalité de location de nginx. * ` (chaîne vide) - Correspondance de préfixe *=- Correspondance exacte *~- Correspondance regex *~*- Correspondance regex insensible à la casse *^~` - Correspondance de préfixe, ignorer les regex

lookup

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

Récupère la valeur pour l'uri fourni.
Retourne nil et un message d'erreur en cas d'échec.

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-locations.