【实战经验】如何动态配置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/
