【实战经验】如何动态配置NGINX Map?
NGINX 向云原生演进,All in OpenNJet
Map 指令介绍
map $variable $new_variable { key value; key value; # 可以添加更多的键值对 default value; }
-
$variable
是要映射的输入变量的名称。 -
$new_variable
是映射结果的新变量的名称。 -
key
是输入变量可能的值。 -
value
是与每个键关联的映射值。 -
default
是当输入变量不匹配任何键时的默认值。
经典使用场景
- 路径重写:您可以使用Map模块来根据请求的URI重写URL,例如将旧的URL映射到新的URL。
map $uri $new_uri { /old-path /new-path; /another-old-path /another-new-path; } server { location / { rewrite ^ $new_uri permanent; } }
- 请求分发:您可以使用map模块将请求分发到不同的后端服务器,根据某些条件进行选择。
map $arg_backend $backend { default backend1; server1 backend2; server2 backend3; } upstream backend1 { server backend1.example.com; } upstream backend2 { server backend2.example.com; } upstream backend3 { server backend3.example.com; } server { location / { proxy_pass http://$backend; }
- 权限控制:您可以使用map模块根据客户端IP地址或其他条件来控制访问权限。
map $remote_addr $allowed { 192.168.1.0/24 1; default 0; } server { location /private { if ($allowed = 0) { return 403; } # 允许访问私有内容 } }
这些是一些NGINX map模块的常见使用场景,您可以根据具体需求自定义映射规则以满足您的需求。
如何利用OpenNJet实现Map指令动态配置?
- 灵活性:动态配置map允许您在不重启的情况下实时更新映射规则。这意味着您可以根据需要更改映射,而无需中断服务。
- 性能优化:动态配置map可以提高性能,因为它允许在内存中维护映射,而不是在每次请求时重新加载配置文件。
- 简化管理:使用动态配置map,您可以将配置信息集中存储在一个地方,而不是分散在多个配置文件中。这使得管理和维护更加容易。
- 实时更新:您可以通过API或其他方法实时更新映射,以响应不同情境下的需求变化,而无需手动编辑配置文件。
worker_processes auto; cluster_name njet; node_name node1; error_log logs/error.log error; helper ctrl modules/njt_helper_ctrl_module.so conf/njet_ctrl.conf; helper broker modules/njt_helper_broker_module.so; load_module modules/njt_http_location_module.so; load_module modules/njt_http_vtsc_module.so; load_module modules/njt_http_dyn_map_module.so; events { worker_connections 1024; } http { map $arg_service $backend_svr { default "127.0.0.1:18081"; } include mime.types; server { listen 8080; location / { proxy_pass http://$backend_svr; } } server { listen 18081; return 200 "default service 18081\n"; } }
load_module modules/njt_http_sendmsg_module.so; load_module modules/njt_ctrl_config_api_module.so; load_module modules/njt_helper_health_check_module.so; load_module modules/njt_http_upstream_api_module.so; load_module modules/njt_http_location_api_module.so; load_module modules/njt_doc_module.so; load_module modules/njt_http_vtsd_module.so; error_log logs/error_ctrl.log error; events { worker_connections 1024; } http { include mime.types; access_log off; server { listen 8081; keepalive_timeout 0; location / { return 200 "njet control panel\n"; } location /hc { health_check_api; } location /api { api write=on; } location /kv { dyn_sendmsg_kv; } location /config { config_api; } location /doc { doc_api; } location /dyn_loc { dyn_location_api; } location /metrics { vhost_traffic_status_display; vhost_traffic_status_display_format html; } } }
OpenNJet动态配置Map提供了更灵活、高性能、简化管理和实时更新的优势,使您能够更好地管理和优化您的服务器配置。OpenNJet 最早是基于 NGINX1.19 基础 fork 并独立演进,OpenNJet 具有高性能、稳定、易扩展的特点,同时也解决了 NGINX 长期存在的难于动态配置、管理功能影响业务等问题。作为底层引擎,OpenNJet 利用动态加载机制可以实现不同的产品形态,如 API 网关、消息代理、出入向代理,负载均衡,WAF 等等。在云原生架构中,OpenNJet 除了提供南北向通信网关的功能以外,还提供了服务网格中东西向通信、透明流量劫持、熔断、遥测与故障注入等新功能特性。
Gitee 邮件组
邀您开源共建:https://njet.org.cn/
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Databend join reorder 策略
作者:王旭东 Databend 研发工程师 https://github.com/xudong963 join order 的重要性 Join order 是指在执行SQL查询时,决定多个表进行 join 的顺序。它是数据库查询优化的一个重要方面,对查询性能和效率有着重要的影响, 不同的 join order 对性能可能有数量级的影响。 优化器优化 join order 的核心流程 join plan 枚举 根据统计信息估算结果的大小 (cardinality estimation) 把 2 中的结果带入到代价模型计算枚举 plan 的 代价 (cost model) 本文中我们只关心第一步 join plan enumeration, 也就是 join reorder 算法。 join reorder 算法 贪心启发式算法 当需要 join 的表都数量过多时(通常超过10个),适合用贪心算法,其优势在于能够较快的找到还不错的 join order. 核心思想:从一张表拓展到 N 张表,每次选出使当前代价最小的一张表,加入到 join tree中,构建出 left-deep tree....
- 下一篇
GreptimeDB v0.4 重大更新 — 新版引擎 Mito2 专为时序数据而生
引言 从去年 11 月 GreptimeDB 首次上线开源以来,Greptime 团队经过一轮又一轮的持续迭代,从 v0.1 的初步架构完成,到 v0.2 兼容了 PromQL 的单机版本,再到 v0.3 增加了分布式的能力。 v0.3 功能层面已经相对稳定,包括了单机版,分布式,PromQL 兼容性以及对不同接入协议的支持,很多用户开始尝试,我们也收到了大量的反馈和建议,同时,我们也在 GreptimeCloud 项目里面吃自己狗粮,底层完全依托于 v0.3,不断地把需求回吐给 DB 团队。 其中呼声最大的便是查询性能问题,坦率的讲,v0.3 版本虽然功能稳定,写入性能也满足需求,但在查询性能上依然有很大的提升空间,还不足以应对大规模的数据查询分析。v0.4 为了解决这个问题,对存储查询引擎 Mito 做了一次重大升级,几乎是重写了一遍,而围绕引擎相关的组件也随之重构,最后通过 TSBS 测试套件实测提升了平均有 6 倍,具体可以参考文末的测试报告(PS: 可能熟悉车的朋友会觉得 Mito 比较眼熟,没错,是来自于 Alfa Romeo MiTo,谁让公司有三位 Alfa Romeo...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Linux系统CentOS6、CentOS7手动修改IP地址
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装