Nginx中map指令的具体使用

 更新时间:2024年07月15日 09:48:26   作者:白--茶  
Nginx的map指令是一个强大的工具,用于根据变量的值来设置另一个变量的值,本文就来介绍一下Nginx中map指令的具体使用,感兴趣的可以了解一下

map指令简单介绍

当然这里写的都是官方文档是已经写过的,我简单抄一下哈。

map指令来自于 ngx_http_map_module 模块,提供的核心能力是 基于一个变量创建一个新变量,大概是这意思。

语法: 只能配置在http块内
map string $variable {...}

直接看这个语法好像看不出来它能干什么,所以官方文档上给了几个例子:

map $http_host $name {
    hostnames;

    default       0;

    example.com   1;
    *.example.com 1;
    example.org   2;
    *.example.org 2;
    .example.net  3;
    wap.*         4;
}

解析一下上面👆这个例子的意思👇:

map: 关键字,开辟一段内存空间声明一个map

  • $http_host: 获取host请求头:eg: www.baidu.com
  • $name: 新变量,具体取值是什么取决于结构体内的映射关系

结构体内的数据解析:

hostnames:官方文档给出的解释是:允许用前缀或者后缀掩码指定域名作为源变量值。这个参数必须写在值映射列表的最前面。

读都能读的懂,字也都认识,但是怎么感觉好像还是不太懂呢,又没有同感?于是我测试了一下,其实就是你想用下面那种泛域名来匹配host的话就加一下这个参数, 否则是达不到预期效果的。

default 0; :匹配不到符合条件的数据时 则$name 这个变量就取默认值 0

知道了这之后我能用它来做什么呢?看实际应用的例子

map指令的实践使用

1. 基于cookie做多环境分流

一般中大型公司都会有多套测试环境,对于多环境的访问可能最容易想到的就是对应多个域名,这方法当然可以,但是不优雅,维护多个域名太累。为了偷懒,我们用了一个域名,使用不同的cookie来转发相应的流量到相应的环境。

如何实现?

    map $cookie_cl_env_num $cl_backend_map {
        default   1.1.1.1:80;
        dev-01    upstream_dev-01;
        dev-02    upstream_dev-02;
        dev-03    upstream_dev-03;
        test-01   upstream_test-01;
        test-02   upstream_test-02;
        test-03   upstream_test-03;
        test-04   upstream_test-04;
        test-05   upstream_test-05;
        test-06   upstream_test-06;
        test-07   upstream_test-07;
        test-08   upstream_test-08;
        test-09   upstream_test-09;
        test-10   upstream_test-10;
        test-11   upstream_test-11;
        test-12   upstream_test-12;
        test-13   upstream_test-13;
        test-14   upstream_test-14;
        test-15   upstream_test-15;
    }

    # 随便写一个
    upstream upstream_test-14 {
        server 2.2.2.2:80;
    }

    # 局部实现写一下
    location / {
        pass_pass http://$cl_backend_map;
    }

    # 请求
    curl --cookie "cl_env_num=test-15" a.test.com/api/v1/hahaha

这不就实现了嘛,很方便哈。仅提供思路!当然也可以使用其他变量来分流 UA|args ...

2. 做安全的多域名跨域访问

跨域访问一般情况下我们都会直接设置 * 允许所有跨域访问。但是难免会有一些对安全性要求较高的业务不允许这样,那么对于域名比较多的安全跨域配置,也可以使用map来实现。

map $http_origin $allow_origin {
    ~http://www.baidu.com http://www.baidu.com;
    ~http://m.baidu.com   http://m.baidu.com;
    ~http://a.baidu.com   http://a.baidu.com;
    default               deny;
}

server {
    listen 80;
    server_name www.baidu.com;

    location / {
        ...
        add_header Access-Control-Allow-Origin $allow_origin;
        ...
    }
}

仅提供思路哈,具体情况可以再优化

总结

当然还有很多场景都可以用到, 无法一一列举, 自己能够根据需求和场景灵活运用是最好的。

到此这篇关于Nginx中map指令的具体使用的文章就介绍到这了,更多相关Nginx map指令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 服务器报错nginx 502 Bad Gateway的原因及如何解决详解

    服务器报错nginx 502 Bad Gateway的原因及如何解决详解

    项目启动时莫名其妙网站访问不了,502 Bad Gateway,下面这篇文章主要给大家介绍了关于服务器报错nginx 502 Bad Gateway的原因及如何解决的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • 服务器nginx权限被拒绝解决案例

    服务器nginx权限被拒绝解决案例

    这篇文章主要为大家介绍了服务器nginx权限被拒绝解决案例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 在Nginx服务器中配置mod_proxy反向代理的方法

    在Nginx服务器中配置mod_proxy反向代理的方法

    这篇文章主要介绍了在Nginx服务器中配置mod_proxy反向代理的方法,Nginx服务器最大的特点就是作高性能反向代理使用,需要的朋友可以参考下
    2015-07-07
  • 配置nginx转发内网请求到外网的实现示例

    配置nginx转发内网请求到外网的实现示例

    本文主要介绍了配置nginx转发内网请求到外网的实现示例,通过nginx配置代理实现内网对外网接口数据的获取,涉及nginx安装、配置SSL、日志设置和错误排查,感兴趣的可以了解一下
    2024-10-10
  • 如何配置nginx成功代理websocket

    如何配置nginx成功代理websocket

    配置Nginx作为WebSocket代理是一种常见的设置,以便在Nginx服务器上实现WebSocket连接的转发和负载均衡,这篇文章主要介绍了配置nginx以成功代理websocket,需要的朋友可以参考下
    2024-02-02
  • 本地HTTPS环境搭建的完整步骤记录

    本地HTTPS环境搭建的完整步骤记录

    这篇文章主要给大家介绍了关于本地HTTPS环境搭建的相关资料,文中通过示例代码将实现的步骤一步步介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友下面随着小编来一起学习学习吧
    2018-05-05
  • nginx编译安装出现的常见错误及解决方法

    nginx编译安装出现的常见错误及解决方法

    这篇文章给大家介绍了nginx在编译安装过程中容易出现的常见错误以及解决方法,文中有详细的代码讲解,对我们的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-08-08
  • nginx 内置变量详解及隔离进行简单的拦截

    nginx 内置变量详解及隔离进行简单的拦截

    这篇文章主要介绍了nginx 隔离进行简单的拦截详解的相关资料,这里对nginx内置变量进行了简单的介绍并对隔离拦截进行了详解, 需要的朋友可以参考下
    2016-12-12
  • 一次说清Nginx反向代理及参数配置

    一次说清Nginx反向代理及参数配置

    我们在配置服务时常常会用到Nginx来设置反向代理,虽然常用,但是我们真的了解各个参数的意思吗,本文就给大家一次说清Nginx反向代理及参数配置,需要的朋友可以参考下
    2023-05-05
  • Ubuntu上安装Nginx服务器程序及简单的环境配置小结

    Ubuntu上安装Nginx服务器程序及简单的环境配置小结

    Nginx是一款高性能的异步非阻塞服务器应用程序,人气相当高,这里我们就来看一下在Ubuntu上安装Nginx服务器程序及简单的环境配置小结:
    2016-07-07

最新评论