一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

map指令簡(jiǎn)單介紹

馬哥Linux運(yùn)維 ? 來(lái)源:博客園白--茶 ? 2025-02-13 09:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

map指令簡(jiǎn)單介紹

當(dāng)然這里寫的都是官方文檔是已經(jīng)寫過(guò)的,我簡(jiǎn)單抄一下哈。

map指令來(lái)自于ngx_http_map_module模塊,提供的核心能力是 基于一個(gè)變量創(chuàng)建一個(gè)新變量,大概是這意思。

語(yǔ)法: 只能配置在http塊內(nèi)
map string $variable {...}

直接看這個(gè)語(yǔ)法好像看不出來(lái)它能干什么,所以官方文檔上給了幾個(gè)例子:

map $http_host $name {
    hostnames;

    default       0;

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

解析一下上面這個(gè)例子的意思:

map: 關(guān)鍵字,開辟一段內(nèi)存空間聲明一個(gè)map

$http_host: 獲取host請(qǐng)求頭:eg: www.baidu.com

$name: 新變量,具體取值是什么取決于結(jié)構(gòu)體內(nèi)的映射關(guān)系

結(jié)構(gòu)體內(nèi)的數(shù)據(jù)解析:
    hostnames:
    - 官方文檔給出的解釋是:允許用前綴或者后綴掩碼指定域名作為源變量值。這個(gè)參數(shù)必須寫在值映射列表的最前面。

    讀都能讀的懂,字也都認(rèn)識(shí),但是怎么感覺(jué)好像還是不太懂呢,又沒(méi)有同感?于是我測(cè)試了一下,其實(shí)就是你想用下面那種泛域名來(lái)匹配host的話就加一下這個(gè)參數(shù), 否則是達(dá)不到預(yù)期效果的。

    default 0; :匹配不到符合條件的數(shù)據(jù)時(shí) 則$name 這個(gè)變量就取默認(rèn)值 0

知道了這之后我能用它來(lái)做什么呢?看實(shí)際應(yīng)用的例子

map指令的實(shí)踐使用

1. 基于cookie做多環(huán)境分流

一般中大型公司都會(huì)有多套測(cè)試環(huán)境,對(duì)于多環(huán)境的訪問(wèn)可能最容易想到的就是對(duì)應(yīng)多個(gè)域名,這方法當(dāng)然可以,但是不優(yōu)雅,維護(hù)多個(gè)域名太累。為了偷懶,我們用了一個(gè)域名,使用不同的cookie來(lái)轉(zhuǎn)發(fā)相應(yīng)的流量到相應(yīng)的環(huán)境。

如何實(shí)現(xiàn)?

    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;
    }

    # 隨便寫一個(gè)
    upstream upstream_test-14 {
        server 2.2.2.2:80;
    }

    # 局部實(shí)現(xiàn)寫一下
    location / {
        pass_pass http://$cl_backend_map;
    }

    # 請(qǐng)求
    curl --cookie "cl_env_num=test-15" a.test.com/api/v1/hahaha

這不就實(shí)現(xiàn)了嘛,很方便哈。僅提供思路!當(dāng)然也可以使用其他變量來(lái)分流 UA|args ...

2. 做安全的多域名跨域訪問(wèn)

跨域訪問(wèn)一般情況下我們都會(huì)直接設(shè)置 * 允許所有跨域訪問(wèn)。但是難免會(huì)有一些對(duì)安全性要求較高的業(yè)務(wù)不允許這樣,那么對(duì)于域名比較多的安全跨域配置,也可以使用map來(lái)實(shí)現(xiàn)。

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;
        ...
    }
}

僅提供思路哈,具體情況可以再優(yōu)化

總結(jié)

當(dāng)然還有很多場(chǎng)景都可以用到, 無(wú)法一一列舉, 自己能夠根據(jù)需求和場(chǎng)景靈活運(yùn)用是最好的。

鏈接:https://www.cnblogs.com/chaizhenhua/p/16247460.html

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2785

    瀏覽量

    49990
  • 指令
    +關(guān)注

    關(guān)注

    1

    文章

    615

    瀏覽量

    36325

原文標(biāo)題:Nginx的map指令還能這樣用

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    簡(jiǎn)單介紹ARM的指令

    寄存器內(nèi)容進(jìn)行操作,而不是直接對(duì)內(nèi)存內(nèi)容。簡(jiǎn)單尋址模式,所有l(wèi)oad/store地址由寄存器內(nèi)容和指令確定。該體系結(jié)構(gòu)定義了處理單元與內(nèi)存(包括緩存)的交互,并包括內(nèi)存地址翻譯系統(tǒng)。它還描述了多個(gè)處理
    發(fā)表于 08-18 10:58

    MDK編譯生成的MAP文件內(nèi)容介紹

    MDK編譯生成的MAP文件內(nèi)容
    發(fā)表于 01-08 06:57

    介紹編譯器生成的map和htm文件

    第10章 STM32H7的FLASH,RAM和棧使用情況(map和htm文件)本章為大家介紹編譯器生成的map和htm文件進(jìn)行解析,通過(guò)這兩個(gè)文件可以讓大家對(duì)工程代碼的認(rèn)識(shí)程度提升一個(gè)檔次。目錄第10章 STM32H7...
    發(fā)表于 08-03 07:52

    總線的簡(jiǎn)單介紹

    一、總線的簡(jiǎn)單介紹: 處理器無(wú)疑是計(jì)算機(jī)中最重要的部件,但并不是唯一的部件。一臺(tái)計(jì)算機(jī)也需要隨機(jī)訪問(wèn)存儲(chǔ)器(RAM)來(lái)存放機(jī)器碼指令以便讓處理器執(zhí)行。計(jì)算機(jī)還必須有一些方法使這些指令進(jìn)
    發(fā)表于 08-05 07:25

    介紹一些MOV與ADD指令簡(jiǎn)單例子

    因?yàn)榍度胧较到y(tǒng)學(xué)習(xí)需要,開始學(xué)習(xí)匯編語(yǔ)言學(xué)習(xí)資料是B站的視頻:匯編語(yǔ)言程序 P9目錄一、一些簡(jiǎn)單指令例子二、一個(gè)練習(xí)一、一些簡(jiǎn)單指令例子下圖是一些
    發(fā)表于 01-07 06:39

    制作一個(gè)簡(jiǎn)單的AT指令

    制作一個(gè)簡(jiǎn)單的AT指令解析最近在開發(fā)nrf51822工作上需要搭建一個(gè)簡(jiǎn)單的AT指令庫(kù),突然靈機(jī)一動(dòng)想到了這個(gè)樣一個(gè)簡(jiǎn)單的AT解析函數(shù),雖然
    發(fā)表于 01-21 10:08

    基于MAP的嵌入式MP3播放器設(shè)計(jì)與實(shí)現(xiàn)

    基于MAP的嵌入式MP3播放器設(shè)計(jì)與實(shí)現(xiàn):多媒體應(yīng)用處理器簡(jiǎn)稱MAP,是一種適用于便攜式數(shù)字音視頻設(shè)備的新型嵌入式應(yīng)用處理器。文中介紹MAP 的主要性能特點(diǎn),給出了基于
    發(fā)表于 08-02 14:50 ?38次下載

    Map Service Engine Based On We

    Abstract:A design and implementation of map service engine based on web is introduced
    發(fā)表于 07-23 10:43 ?17次下載

    MC8051_IP核簡(jiǎn)單指令的仿真步驟

    MC8051_IP核簡(jiǎn)單指令的仿真步驟。
    發(fā)表于 05-06 11:47 ?0次下載

    mapreduce 中MAP進(jìn)程的數(shù)量怎么控制?

    1.如果想增加map個(gè)數(shù),則設(shè)置mapred.map.tasks 為一個(gè)較大的值2.如果想減小map個(gè)數(shù),則設(shè)置mapred.min.split.size 為一個(gè)較大的值3.如果輸入中有很多小文件,依然想減少
    發(fā)表于 01-02 14:04 ?2006次閱讀
    mapreduce 中<b class='flag-5'>MAP</b>進(jìn)程的數(shù)量怎么控制?

    mapreduce設(shè)置map個(gè)數(shù)_mapreduce設(shè)置map內(nèi)存

    map階段讀取數(shù)據(jù)前,F(xiàn)ileInputFormat會(huì)將輸入文件分割成split,split的個(gè)數(shù)決定了map的個(gè)數(shù)。
    發(fā)表于 01-02 14:26 ?1.2w次閱讀
    mapreduce設(shè)置<b class='flag-5'>map</b>個(gè)數(shù)_mapreduce設(shè)置<b class='flag-5'>map</b>內(nèi)存

    Java Map的幾種循環(huán)方式學(xué)習(xí)總結(jié)

    本文檔內(nèi)容介紹了基于Java Map的幾種循環(huán)方式學(xué)習(xí)總結(jié),供參考
    發(fā)表于 03-19 15:51 ?0次下載

    ESP8266和單片機(jī)最簡(jiǎn)單的AT指令的使用程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是ESP8266和單片機(jī)最簡(jiǎn)單的AT指令的使用程序免費(fèi)下載。
    發(fā)表于 08-02 17:34 ?11次下載
    ESP8266和單片機(jī)最<b class='flag-5'>簡(jiǎn)單</b>的AT<b class='flag-5'>指令</b>的使用程序免費(fèi)下載

    什么是 map?

    map 容器,又稱鍵值對(duì)容器,即該容器的底層是以紅黑樹變體實(shí)現(xiàn)的,是典型的關(guān)聯(lián)式容器。這意味著,map 容器中的元素可以分散存儲(chǔ)在內(nèi)存空間里,而不是必須存儲(chǔ)在一整塊連續(xù)的內(nèi)存空間中。跟任意其它類型容器一樣,它能夠存放各種類型的對(duì)象。
    的頭像 發(fā)表于 02-27 15:41 ?3590次閱讀

    ARM系列-WFI和WFE指令介紹

    今天來(lái)看兩個(gè)特殊的指令,WFI(Wait For Interrupt)和WFE(Wait For Event)。這兩條指令的語(yǔ)法非常簡(jiǎn)單,不需要帶任何參數(shù)。
    發(fā)表于 05-29 17:47 ?5298次閱讀