讲师中心 微信公众号
AI工具推荐 视频效率加速

如何利用 map 指令实现基于请求来源 IP 的特定 Upstream 后端路由方案

秋涛同学_6722

秋涛同学_6722

发布时间:2026-05-22 13:34:27

|

729人浏览过

|

来源于php中文网

原创

Nginx 的 map 指令是实现基于来源 IP 动态路由最灵活、低侵入的方式,通过 geo 模块匹配 IP 段并映射为 upstream 名称变量,再在 proxy_pass 中引用该变量完成动态转发,推荐配合 realip 获取真实客户端 IP 并注意变量命名与 upstream 严格一致。

如何利用 map 指令实现基于请求来源 ip 的特定 upstream 后端路由方案

Nginx 的 map 指令是实现基于来源 IP 动态路由最灵活、低侵入的方式之一。它不依赖第三方模块,原生支持,且可与 geo、realip 等模块配合,在真实业务中广泛用于灰度发布、地域调度、内外网隔离等场景。

核心思路是:把客户端 IP 映射为一个变量(如 $upstream_name),再在 proxy_pass 中引用该变量,指向对应 upstream 块。


一、基础配置:用 geo + map 绑定 IP 段到 upstream 名称

`geo` 模块适合做 CIDR 匹配(如内网段、特定机房 IP),比纯正则更高效:
# 在 http 块顶层定义
geo $client_network {
    default        0;
    10.0.0.0/8     1;  # 内网 A 段
    172.16.0.0/12  2;  # 内网 B 段
    192.168.0.0/16 3;  # 内网 C 段
    203.0.113.10   4;  # 某个测试公网 IP
}

map $client_network $backend_upstream {
    default        "prod_backend";
    1              "intranet_a_backend";
    2              "intranet_b_backend";
    3              "intranet_c_backend";
    4              "test_backend";
}

这样,每个 IP 段被映射为一个字符串值,后续可直接用于 proxy_pass http://$backend_upstream。


二、进阶用法:结合 realip 获取真实客户端 IP

若 Nginx 前有 CDN 或 LB,需先还原真实 IP,否则 `$remote_addr` 是代理地址:
# 在 http 块中启用 realip(假设可信代理为 10.10.0.0/16)
set_real_ip_from 10.10.0.0/16;
real_ip_header X-Forwarded-For;
real_ip_recursive on;

# 此时 $remote_addr 已更新为真实客户端 IP
geo $is_internal_ip {
    default        0;
    10.0.0.0/8     1;
    172.16.0.0/12  1;
    192.168.0.0/16 1;
}

map $is_internal_ip $backend_upstream {
    0 "public_backend";
    1 "internal_backend";
}

注意:X-Forwarded-For 头可能被伪造,务必只信任已知代理 IP 段,并开启 real_ip_recursive on 安全解析。

Skill Weave Chains — 技能链路由引擎
Skill Weave Chains — 技能链路由引擎

开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。

下载

三、动态 proxy_pass 的关键写法

在 `location` 块中使用变量名拼接 upstream,必须确保变量值**严格等于 upstream 块名称**(含大小写、下划线):
upstream internal_backend {
    server 10.0.1.10:8080;
    server 10.0.1.11:8080;
}

upstream public_backend {
    server 10.0.2.20:8080;
    server 10.0.2.21:8080;
}

server {
    listen 80;
    location / {
        proxy_pass http://$backend_upstream;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

⚠️ 注意事项:

  • 变量不能带引号,proxy_pass http://$backend_upstream; ✅;proxy_pass "http://$backend_upstream"; ❌(语法错误)
  • upstream 名称中避免空格、短横线(-),推荐全小写+下划线
  • 若变量为空或未匹配,Nginx 会报 no resolver defined to resolve ... 错误,建议 default 值设为稳定可用的 upstream

四、替代方案对比:map vs if + geo vs rewrite

| 方式 | 是否推荐 | 原因 | |------|----------|------| | `map` + `geo` | ✅ 强烈推荐 | 编译期构建查找表,性能高;逻辑清晰;支持嵌套和默认兜底 | | `if ($remote_addr ~ ...) { set $upstream ... }` | ⚠️ 不推荐 | `if` 在 location 外不安全;正则匹配开销大;易出错 | | `rewrite ... break` 配合不同 location | ❌ 不适用 | 路由逻辑分散,维护成本高,无法复用 upstream |

map 是声明式、无副作用、可静态验证的最佳实践。

不复杂但容易忽略细节

相关文章

路由优化大师
路由优化大师

路由优化大师是一款及简单的路由器设置管理软件,其主要功能是一键设置优化路由、屏广告、防蹭网、路由器全面检测及高级设置等,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2603

2023.08.11

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6630

2024.03.19

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

6066

2024.03.19

服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

457

2023.08.15

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

940

2023.09.08

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

3092

2023.09.19

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

1016

2023.10.09

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

909

2023.10.17

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
零基础精通 PS 视频教程
零基础精通 PS 视频教程

共268课时 | 120.1万人学习

前端工程师必备技能—PS切图
前端工程师必备技能—PS切图

共11课时 | 2.2万人学习

麦子学院Photoshop切片视频教程
麦子学院Photoshop切片视频教程

共13课时 | 4.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn