vhost: NGINX 模块 Lua 的主机名匹配库
安装
如果您尚未设置 RPM 仓库订阅,请 注册。然后您可以继续以下步骤。
CentOS/RHEL 7 或 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
要在 NGINX 中使用此 Lua 库,请确保已安装 nginx-module-lua。
本文档描述了 lua-resty-vhost v0.1,于 2016 年 10 月 14 日发布。
用于将主机名匹配到值的库。
支持通配符和 .hostname.tld 语法,方式与 Nginx 的 server_name 指令相同。
以 . 或 *. 开头的键将匹配顶级域名及所有子域名,最长匹配优先。非通配符匹配始终优先。
不支持正则匹配和前缀通配符。
概述
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
}
}
}
方法
new
语法: my_vhost, err = vhost:new(size?)
创建一个新的 resty-vhost 实例,带有可选的初始大小。
insert
语法: ok, err = my_vhost:insert(key, value)
添加一个新的主机名键及其关联值。
键必须是字符串。
在失败时返回 false 和错误消息。
lookup
语法: val, err = my_vhost:lookup(hostname)
检索最佳匹配主机名条目的值。
在失败时返回 nil 和错误消息。
GitHub
您可以在 nginx-module-vhost 的 GitHub 仓库 中找到有关此模块的其他配置提示和文档。