vhost: Biblioteca de coincidencia de nombres de host para nginx-module-lua
Instalación
Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.
CentOS/RHEL 7 o 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
Para usar esta biblioteca Lua con NGINX, asegúrate de que nginx-module-lua esté instalado.
Este documento describe lua-resty-vhost v0.1 lanzado el 14 de octubre de 2016.
Biblioteca para hacer coincidir nombres de host con valores. Soporta sintaxis de comodín y .hostname.tld de la misma manera que la directiva server_name de Nginx.
Las claves que comienzan con . o *. coincidirán con el dominio raíz y todos los subdominios, ganando la coincidencia más larga. Las coincidencias no comodín siempre ganan.
No se admiten coincidencias de expresiones regulares ni comodines de prefijo.
Resumen
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, "Coincidencia, configurando certificados: ", 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
-- hacer algo basado en val
ngx.say("Coincidido: ", val.cert)
else
if err then
ngx.log(ngx.ERR, err)
end
ngx.exit(404)
end
}
}
}
Métodos
new
syntax: my_vhost, err = vhost:new(size?)
Crea una nueva instancia de resty-vhost con un tamaño inicial opcional.
insert
syntax: ok, err = my_vhost:insert(key, value)
Agrega una nueva clave de nombre de host con el valor asociado.
Las claves deben ser cadenas.
Devuelve false y un mensaje de error en caso de fallo.
lookup
syntax: val, err = my_vhost:lookup(hostname)
Recupera el valor para la entrada de nombre de host que mejor coincide.
Devuelve nil y un mensaje de error en caso de fallo.
GitHub
Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-vhost.