nginx map指令详解 --- 源码剖析

本文详细介绍了Nginx中map指令的使用、配置解析过程,包括$http_referer变量的处理、is_valid变量的设置,以及正则和变量形式的value处理。同时,讨论了指令的使用注意事项,如限制范围和Lua中的变量赋值问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在最近的项目中涉及到map指令的处理,用起来还是有点感觉的,所以看了一下源码实现,现整理了一下供大家参考!如有错误,欢迎指正。

配置语法

Syntax:map string $variable { ... }
Default:
Context:http

配置示例

注解:

map是nginx指令

$http_referer表示获取请求的Referer信息

$is_valid表示最后匹配的结果

default 0; pass 1; ~csdn* 1;:表示判断匹配的条件(具体是拿Referer的值进行匹配,匹配到之后,将对应的值赋值给变量$is_valid)

源码分析

配置解析

配置解析的大入口为char * ngx_http_map_block()。

1.首先是针对$http_referer的解析,其主要目的是确定$http_referer变量在全局变量数组(cmcf->variables)中的索引位置及设置获取变量value的回调

2.处理$is_valid变量,将该变量作为一个nginx内部变量插入到全部变量数组中,设置了该变量获取的回调函数ngx_http_map_variable()

3.处理default 0; pass 1; ~csdn* 1;配置信息,此时需要进入新函数ngx_http_map。

针对key的处理方式存在两种:a、非正则形式,将所有key保存到一张hash表中;b、正则形式,将正则放到一个数组中。

针对value的处理方式也存在两种方式:a、变量形式:如果value是变量,参照1中的处理方式,获取全局变量数据中的索引位置保存起来,后续使用时,直接从变量数组中获取对应的变量值;b、非变量形式,直接保存该固定字符串

指令使用

$is_valid变量的使用,就相对比较简单了。优先正则查找一番,没有的话,在正则查找

注意事项

1.该map执行只能在http块中配置

2.$is_valid变量不能在lua中进行赋值

3.也可以通过inclue属性包含文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值