Aller au contenu

vhost: Bibliothèque de correspondance de noms d'hôtes pour nginx-module-lua

Installation

Si vous n'avez pas configuré d'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-vhost

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-vhost

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

Ce document décrit lua-resty-vhost v0.1 publié le 14 octobre 2016.


Bibliothèque pour faire correspondre les noms d'hôtes à des valeurs. Prend en charge la syntaxe wildcard et .hostname.tld de la même manière que la directive server_name de Nginx.

Les clés commençant par . ou *. correspondront à l'apex et à tous les sous-domaines, la correspondance la plus longue l'emporte. Les correspondances non-wildcard l'emportent toujours.

Les correspondances Regex et les wildcards de préfixe ne sont pas prises en charge.

Aperçu

init_by_lua_block {
    local vhost = require("resty.vhost")
    my_vhost = vhost:new()
    local ok, err = my_vhost:insert("example.com",      { key = "example.com.key",          cert = "example.com.crt" })
    local ok, err = my_vhost:insert("www.example.com",  { key = "example.com.key",          cert = "example.com.crt" })
    local ok, err = my_vhost:insert(".sub.example.com", { key = "star.sub.example.com.key", cert = "star.sub.example.com.crt" })
    local ok, err = my_vhost:insert("www.example2.com", { key = "www.example2.com.key",     cert = "www.example2.com.crt" })
}

server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name vhost;

    ssl_certificate         /path/to/default/cert.crt;
    ssl_certificate_key     /path/to/default/key.crt;

    ssl_certificate_by_lua_block {
        local val, err = my_vhost:lookup(require("ngx.ssl").server_name())
        if not val then
            ngx.log(ngx.ERR, err)
        else
            ngx.log(ngx.DEBUG, "Match, setting certs: ", val.cert, " ", val.key)
            -- set_certs_somehow(val)
        end
    }

    location / {
        content_by_lua_block {
            local val, err = my_vhost:lookup(ngx.var.host)
            if val then
                -- do something based on val
                ngx.say("Matched: ", val.cert)
            else
                if err then
                    ngx.log(ngx.ERR, err)
                end
                ngx.exit(404)
            end
        }
    }
}

Méthodes

new

syntax: my_vhost, err = vhost:new(size?)

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

insert

syntax: ok, err = my_vhost:insert(key, value)

Ajoute une nouvelle clé de nom d'hôte avec une valeur associée.

Les clés doivent être des chaînes.

Retourne false et un message d'erreur en cas d'échec.

lookup

syntax: val, err = my_vhost:lookup(hostname)

Récupère la valeur pour la meilleure entrée de nom d'hôte correspondante.

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-vhost.