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.