Nginx应用与运维——Nginx HTTP模块详解(动态赋值功能模块)
Nginx HTTP模块详解1、动态赋值功能模块1.1、根据浏览器动态赋值1.1.1、旧浏览器标识指令——ancient_browser1.1.2、设置旧浏览器变量值指令——ancient_browser_value1.1.3、新浏览器标识指令——modern_browser1.1.4、设置新浏览器变量值指令——modern_browser_value1.2、根据IP动态赋值1.3、根据IP动态获取城市信息1.4、比例分配赋值1.5、变量映射赋值1、动态赋值功能模块Nginx在核心模块及其他模块中都提供了内置变量用户可以根据需要灵活调用。在Nginx的模块中除提供了rewrite指令以方便用户对变量进行静态赋值外还提供了根据请求内容的变化为变量动态赋值的功能。1.1、根据浏览器动态赋值模块名称ngx_http_browser_module该模块的功能是根据客户端HTTP请求头中的属性字段User-Agent的值按照用户的指令配置设置变量$modern_browser和$ancient_browser的值。用户可以根据变量$modern_browser和$ancient_browser的值对客户端浏览器进行区分并对HTTP请求进行不同的处理。该模块的内置配置指令如表所示。1.1.1、旧浏览器标识指令——ancient_browser配置样例如下http{ancient_browserUCWEB;}变量$ancient_browser的值默认为1。1.1.2、设置旧浏览器变量值指令——ancient_browser_value配置样例如下http{ancient_browserUCWEB;ancient_browser_value oldweb;server{if($ancient_browser){rewrite ^ /${ancient_browser}.html;# 重定向到oldweb.html}}}1.1.3、新浏览器标识指令——modern_browser配置样例如下http{modern_browser msie5.5;}内置浏览器类型有msie、gecko由Mozilla基金会维护Mozilla及Netscape 6后续版本是基于Gecko开发的​、opera、safari、konqueror。当指令值为unlisted时Nginx在HTTP请求头中的属性字段User-Agent的值为空或无法识别浏览器类型时设置变量$modern_browser的值为1。配置样例如下http{modern_browser msie5.5;modern_browser unlisted;}1.1.4、设置新浏览器变量值指令——modern_browser_value配置样例如下http{modern_browser msie5.5;modern_browser_value newweb;server{if($modern_browser){rewrite ^ /${modern_browser}.html;}}}配置样例如下ancient_browserUCWEB;# 必须使用单引号ancient_browser_value oldweb;# 设置$ancient_browser的值为oldwebmodern_browser_value newweb;# 设置$ancient_browser的值为newwebmodern_browser unlisted;# 设置$modern_browser的值为1, $ancient_browser的值为0root /opt/nginx-web;server{listen8080;if($ancient_browser){rewrite ^ /${ancient_browser}.html;# 重定向到oldweb.html}if($modern_browser){rewrite ^ /${modern_browser}.html;# 重定向到newweb.html}}1.2、根据IP动态赋值模块名称ngx_http_geo_module该模块的功能是从源变量获取IP地址并根据设定的IP与对应值的列表对新变量进行赋值。该模块只有一个geo指令指令格式如下geo 源变量新变量{}geo指令的默认源变量是$remote_addr新变量默认值为空。geo指令的作用域只能是http。该指令的指令值参数如表所示。配置样例如下http{geo$country{proxy_recursive;# 启用代理递归查询default ZZ;# 默认值为ZZinclude conf/geo.conf;# 引入外部列表文件proxy192.168.100.0/24;# 上层代理地址为192.168.100.0/24的IPproxy2001:0db8::/32;# 上层代理地址为2001:0db8::/32的IP127.0.0.0/16 US;# 赋值US127.0.0.1/32 RU;# 赋值RU10.1.0.0/16 RU;# 赋值RU192.168.1.0/24 UK;# 赋值UK}}为了加速加载IP来设定变量表IP地址应按升序填写。外部文件geo.conf的内容格式如下10.2.0.0/16 RU;192.168.2.0/24 RU;以地址段形式定义的IP地址中ranges参数的配置样例如下http{geo$country{ranges;# 使用以地址段的形式定义的IP地址default ZZ;10.1.0.0-10.1.255.255 RU;192.168.1.0-192.168.1.255 UK;}}自定义源变量配置样例如下geo$arg_ip$address{# 设置请求参数IP为源变量default CN;127.0.0.0/24 US;127.0.0.10/32 RU;10.1.0.0/16 RU;delete127.0.0.10/32;# 删除127.0.0.10/32的设定}server{listen8081;server_name localhost;charset utf-8;root /opt/nginx-web;default_type text/xml;location /{rewrite ^ /${address}.htmlbreak;# 重定向到$address.html}}1.3、根据IP动态获取城市信息模块名称ngx_http_geoip_module该模块的功能是将客户端的IP地址与MaxMind数据库中的城市地址信息进行比对然后将对应的城市地址信息赋值给内置变量。该模块的配置指令如表所示。国家信息数据库指令城市信息数据库指令机构信息数据库指令上层代理IP指令代理递归查询IP指令geo内置变量如表所示。配置样例如下geoip_country /usr/share/GeoIP/GeoIP.dat;geoip_city /usr/share/GeoIP/GeoIPCity.dat;geoip_org /usr/share/GeoIP/GeoIPASNum.dat;geoip_proxy192.168.2.145;geoip_proxy_recursive on;server{listen8081;server_name localhost;charset utf-8;root /opt/nginx-web;default_type text/xml;location /{if($geoip_country_code){rewrite ^ /$geoip_country_code/break;# 重定向到$geoip_country_cod目录}}}1.4、比例分配赋值模块名称ngx_http_split_clients_module该模块会按照配置指令将一个0232之间的数值根据设定的比例分割为多个数值范围每个数值范围会被设定一个对应的给定值。用户每次请求时指定的字符串会被计算出一个数值该模块会将该数值所在范围对应的给定值赋值给配置中定义的变量。该功能常用来按照用户的来源IP进行访问流量分流。该指令语法格式如下split_clients 字符串 新变量{}配置样例如下split_clients${remote_addr}AAA$source{# ${remote_addr}AAA会被计算出一个数值0.5% .one;# 数值在021474835之间$source被赋值.one80.0% .two;# 数值在214748363435973836之间$source被赋值.two*;# 数值在34359738374294967295, $source被赋值}server{location /{index index${source}.html;}}该指令会将一个2的32次幂计算的值数值范围为04294967295按照指令域中的比例进行分割。客户端每次请求时会将指定字符串使用MurmurHash2算法计算出一个0232(04 294 967 295)之间的数值该模块会将该数值所在范围对应的给定值赋值给配置中定义的变量。指定的字符串可以是Nginx内置变量。1.5、变量映射赋值模块名称ngx_http_map_module该模块的功能是在客户端每次请求时Nginx按照map指令域中源变量的当前值把设定的对应值赋值给新变量。该指令语法格式如下map 源变量 新变量{}map指令值参数如表所示。配置样例如下map$remote_addr$name{hostnames;default0;example.com1;*.example.com1;# 主机名前缀wap.*4;# 主机名后缀include hostmap.conf;}map指令只能编辑在http指令域中。map指令域中指定了源变量为不同值时与新变量值的对应关系。map指令域中源变量的值可以是字符串或正则表达式的匹配。map指令域中对源变量的值进行正则表达式匹配时以“”开头表示对源变量值的匹配区分大小写以“*”开头表示对源变量值的匹配不区分大小写。map$http_user_agent$mobile{Opera Mini1;*UCWEB2;}map指令域中对源变量的值进行正则表达式匹配时可以对源变量值进行正则捕获。map$uri$new_uri{^/user/(.*)ucenter;# 若URI为/user/login时,$new_uri被赋值为ucenter}server{listen8080;location /user{default_type text/plain;rewrite ^ /$new_uri/$1;# rewrite到/ucenter/login}location /ucenter{index index.html;}}若源变量值中包含特殊字符串“”​可以用“”进行转义。map$http_referer$flag{Mozilla111;\Mozilla222;}新变量的值可以是字符串也可以是另一个变量。map$http_referer$value{Mozillachrom;\safity$http_user_agent;}map指令域中当源变量值存在相同匹配项时匹配顺序如下1)完全匹配的字符串。2)有主机前缀的最长字符串。3)有主机后缀的最长字符串。4)在指令域中按自上而下顺序最先匹配到的正则表达式。5)default参数给定的默认值。map哈希表大小指令map哈希桶大小指令配置样例如下map$remote_addr$dir{default www;# 设置默认目录为wwwinclude conf.d/remoteip.list;# 以外部文件形式编写IP及对应新变量赋值列表}server{listen8080;root /opt/nginx-web/$dir;index index.html;}remoteip.list文件内容192.168.2.145 blue;# 源IP为192.168.2.145时map的新变量值为blue192.168.2.100 green;# 源IP为192.168.2.100时map的新变量值为green

相关新闻

秋季眼睛过敏高发期,家里有娃的这份防护要点请收好/钟祥极博视科普

秋季眼睛过敏高发期,家里有娃的这份防护要点请收好/钟祥极博视科普

入秋之后,不少家长发现孩子开始频繁揉眼睛,眼睛红红的、眼泪汪汪。有人觉得是没睡好,有人说是看电视太多,也有人认为是“上火”。其实,秋季正是过敏性结膜炎的高发季节,家里有娃的,这件事值得花…

2026/10/2 17:25:42 阅读更多 →
AI自动提取会议纪要中的行动项:如何校验负责人与截止时间的准确性

AI自动提取会议纪要中的行动项:如何校验负责人与截止时间的准确性

把会议记录变成可执行的行动清单,应该让 AI 同时提取要做什么、谁接受了任务、原话中的期限和出处,再把决定、未决问题分开。发布到任务系统之前,逐项回到记录核对,不能只看表格是否整齐。 “Leon 会发检查清单”“应该有人查一下…

2026/10/2 17:24:41 阅读更多 →
半导体设备用陶瓷电极的作用是什么 半导体设备陶瓷电极加工厂家

半导体设备用陶瓷电极的作用是什么 半导体设备陶瓷电极加工厂家

在半导体制造过程中,等离子刻蚀、PECVD、溅射、离子注入、晶圆清洗等工艺都离不开稳定的等离子体环境。而陶瓷电极作为产生、传导和约束等离子体的关键部件,直接影响工艺均匀性、颗粒污染水平和设备使用寿命。很多用户搜索“半导体设备用陶瓷电极的作用是…

2026/10/2 17:24:41 阅读更多 →

最新新闻

SAP PLM与西门子PLM选型:聚焦BOM与ECN的语义集成

SAP PLM与西门子PLM选型:聚焦BOM与ECN的语义集成

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 17:55:57 阅读更多 →
Go 后端 UUID 生成与解析实战:基于 nakama 中 gofrs/uuid v5 的完整指南

Go 后端 UUID 生成与解析实战:基于 nakama 中 gofrs/uuid v5 的完整指南

后端即时通讯社交游戏开发 【免费下载链接】nakama Scalable open-source game backend server: multiplayer, matchmaking, leaderboards, chat, and social features for games. 项目地址: https://gitcode.com/GitHub_Trending/na/nakama 点击查看 免费下载 导读…

2026/10/2 17:55:57 阅读更多 →
tailcat 发布流程完全指南:从 SSH 签名 Tag 到 GoReleaser 自动构建发布

tailcat 发布流程完全指南:从 SSH 签名 Tag 到 GoReleaser 自动构建发布

【免费下载链接】tailcat like netcat, but over Tailscales data plane, without Tailscales control plane 项目地址: https://gitcode.com/GitHub_Trending/ta/tailcat 点击查看 免费下载 本文是 tailcat(基于 Tailscale 数据面、无需控制面的 netca…

2026/10/2 17:55:57 阅读更多 →
type-challenges 中等题 02257:用类型体操实现 MinusOne(正整数减一)

type-challenges 中等题 02257:用类型体操实现 MinusOne(正整数减一)

示例工程 【免费下载链接】type-challenges Collection of TypeScript type challenges with online judge 项目地址: https://gitcode.com/GitHub_Trending/ty/type-challenges 点击查看 免费下载 导读 MinusOne 是 type-challenges 仓库中一道 medium 难度、mat…

2026/10/2 17:55:57 阅读更多 →
Art Design Pro 快速上手:Vue 3 + Vite + TypeScript 后台管理模板的安装、精简与开发实战指南

Art Design Pro 快速上手:Vue 3 + Vite + TypeScript 后台管理模板的安装、精简与开发实战指南

前端企业应用UI组件 【免费下载链接】art-design-pro A Vue 3 admin dashboard template using Vite TypeScript Element Plus | vue3 admin | vue-admin — focused on user experience and visual design. 项目地址: https://gitcode.com/GitHub_Trending/ar/ar…

2026/10/2 17:55:57 阅读更多 →
递推最小二乘法RLS:公式推导、遗忘因子与工程实现要点

递推最小二乘法RLS:公式推导、遗忘因子与工程实现要点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 17:54:57 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事:从零开始做 AI 工程化,难的从来不是调模型、写提示词,而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码,也可能刚读完一些概念,但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用,几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过:模型代码写完了,数据管道跑通了,满心欢喜地按下训练启动脚本,结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”:为什么你总在找数据集,却总找不到真正能用的? 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里,出现频率排进前三。不是模型调不好,不是代码写不对,而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 6:09:11 阅读更多 →