跳转至

locations: Lua 库实现 nginx 风格的 location uri 匹配

安装

如果您尚未设置 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-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

要在 NGINX 中使用此 Lua 库,请确保已安装 nginx-module-lua

本文档描述了 lua-resty-locations v0.2,发布于 2017 年 8 月 31 日。


Lua 库实现 nginx 风格的 'location' uri 匹配。

作为 nginx 的 location 功能。 支持最长前缀匹配、正则匹配、不区分大小写的正则匹配和精确匹配。

  • 首先检查精确匹配,命中后返回搜索结果。
  • 然后检查前缀匹配,并记住最长匹配。
  • 如果前缀匹配有 ^~ 修饰符,搜索返回
  • 正则表达式按顺序检查
  • 如果没有正则匹配,返回最长前缀

概述

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

        -- 前缀匹配
        local ok, err = my_locs:set("/foo", "/foo")

        -- 精确匹配
        local ok, err = my_locs:set("/bar", "= /bar", "=")

        -- 正则匹配
        local ok, err = my_locs:set("^/baz", "~ ^/baz", "~")

        -- 不区分大小写的正则匹配
        local ok, err = my_locs:set("^/qux", "~* ^/qux", "~*")

        -- 前缀匹配,不检查正则
        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
                -- 根据 val 做一些事情
                ngx.say("匹配: ", val)
            else
                if err then
                    ngx.log(ngx.ERR, err)
                end
                ngx.exit(404)
            end
        }
    }
}

方法

new

语法: my_locations, err = locations:new(size?)

创建一个新的 resty-locations 实例,带有可选的初始大小

set

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

添加一个新的键及其关联值和修饰符,默认值为空字符串用于前缀匹配。 键必须是字符串。 失败时返回 false 和错误消息。

修饰符与 nginx location 功能相同。 * ` (空字符串) - 前缀匹配 *=- 精确匹配 *~- 正则匹配 *~*- 不区分大小写的正则匹配 *^~` - 前缀匹配,跳过正则

lookup

语法: val, err = my_locations:lookup(uri)

检索提供的 uri 的值。 失败时返回 nil 和错误消息

GitHub

您可以在 nginx-module-locations 的 GitHub 仓库 中找到此模块的其他配置提示和文档。