溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Nginx服務(wù)器中map模塊怎么配置與使用

發(fā)布時(shí)間:2022-04-29 16:16:57 來源:億速云 閱讀:827 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“Nginx服務(wù)器中map模塊怎么配置與使用”,在日常操作中,相信很多人在Nginx服務(wù)器中map模塊怎么配置與使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Nginx服務(wù)器中map模塊怎么配置與使用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

map指令使用ngx_http_map_module模塊提供的。默認(rèn)情況下,nginx有加載這個(gè)模塊,除非人為的 --without-http_map_module。
ngx_http_map_module模塊可以創(chuàng)建變量,這些變量的值與另外的變量值相關(guān)聯(lián)。允許分類或者同時(shí)映射多個(gè)值到多個(gè)不同值并儲存到一個(gè)變量中,map指令用來創(chuàng)建變量,但是僅在變量被接受的時(shí)候執(zhí)行視圖映射操作,對于處理沒有引用變量的請求時(shí),這個(gè)模塊并沒有性能上的缺失。
一. ngx_http_map_module模塊指令說明
map
語法: map $var1 $var2 { ... }
默認(rèn)值: —
配置段: http
map為一個(gè)變量設(shè)置的映射表。映射表由兩列組成,匹配模式和對應(yīng)的值。
在 map 塊里的參數(shù)指定了源變量值和結(jié)果值的對應(yīng)關(guān)系。
匹配模式可以是一個(gè)簡單的字符串或者正則表達(dá)式,使用正則表達(dá)式要用('~')。
一個(gè)正則表達(dá)式如果以 “~” 開頭,表示這個(gè)正則表達(dá)式對大小寫敏感。以 “~*”開頭,表示這個(gè)正則表達(dá)式對大小寫不敏感。

map $http_user_agent $agent {
    default "";
    ~curl curl;
    ~*apachebench" ab;
}

正則表達(dá)式里可以包含命名捕獲和位置捕獲,這些變量可以跟結(jié)果變量一起被其它指令使用。

map $uri $value {
  /ttlsa_com          /index.php;
  ~^/ttlsa_com/(?<suffix>.*)$ /boy/;
  ~/fz(/.*)          /index.php?;              
}

[warning]不能在map塊里面引用命名捕獲或位置捕獲變量。如~^/ttlsa_com/(.*)  /boy/$1; 這樣會報(bào)錯(cuò)nginx: [emerg] unknown  variable。[/warning]如果源變量值包含特殊字符如‘~',則要以‘\'來轉(zhuǎn)義。

map $http_referer $value {
  mozilla  111;
  \~mozilla 222;
}

結(jié)果變量可以是一個(gè)字符串也可以是另外一個(gè)變量。

map $num $limit {
     1 $binary_remote_addr;
     0 "";
}

map指令有三個(gè)參數(shù):
default : 指定如果沒有匹配結(jié)果將使用的默認(rèn)值。當(dāng)沒有設(shè)置 default,將會用一個(gè)空的字符串作為默認(rèn)的結(jié)果。
hostnames : 允許用前綴或者后綴掩碼指定域名作為源變量值。這個(gè)參數(shù)必須寫在值映射列表的最前面。
include : 包含一個(gè)或多個(gè)含有映射值的文件。
如果匹配到多個(gè)特定的變量,如掩碼和正則同時(shí)匹配,那么會按照下面的順序進(jìn)行選擇:
1. 沒有掩碼的字符串
2. 最長的帶前綴的字符串,例如: “*.example.com”
3. 最長的帶后綴的字符串,例如:“mail.*”
4. 按順序第一個(gè)先匹配的正則表達(dá)式 (在配置文件中體現(xiàn)的順序)
5. 默認(rèn)值
map_hash_bucket_size
語法: map_hash_bucket_size size;
默認(rèn)值: map_hash_bucket_size 32|64|128;
配置段: http
指定一個(gè)映射表中的變量在哈希表中的最大值,這個(gè)值取決于處理器的緩存。
map_hash_max_size
語法: map_hash_max_size size;
默認(rèn)值: map_hash_max_size 2048;
配置段: http
設(shè)置映射表對應(yīng)的哈希表的最大值。
二. 實(shí)例

http {
 map $http_user_agent $agent {
 ~curl curl;
 ~*chrome chrome;
 }
 server {
    listen    8080;
    server_name test.ttlsa.com;
 
    location /hello {
 default_type text/plain;
 echo http_user_agent: $http_user_agent;
 echo agent: agent:$agent;
 }
 }
}
# curl 127.0.0.1:8080/hello
http_user_agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 openssl/0.9.8b zlib/1.2.3 libidn/0.6.5
agent: curl

Nginx服務(wù)器中map模塊怎么配置與使用

Nginx服務(wù)器中map模塊怎么配置與使用

http {
 map $uri $match {
    ~^/hello/(.*) http://www.ttlsa.com/;
 }
 server {
    listen    8080;
    server_name test.ttlsa.com;
 
    location /hello {
        default_type text/plain;
        echo uri: $uri;
        echo match: $match;
        echo capture: $1;
        echo new: $match$1;
    }
 }
}

Nginx服務(wù)器中map模塊怎么配置與使用

ps:基于map指令和geo指令的限速白名單配置

http {
 geo $whiteiplist {
 default 1;
 127.0.0.1 0;
 10.0.0.0/8 0;
 121.207.242.0/24 0;
 }
 
 map $whiteiplist $limit {
 1 $binary_remote_addr;
 0 "";
 }
 
 limit_conn_zone $limit zone=limit:10m;
 
 server {
    listen    8080;
    server_name test.ttlsa.com;
 
    location ^~ /ttlsa.com/ {
        limit_conn limit 4;
        limit_rate 200k;
        alias /data/www.ttlsa.com/data/download/;
    }
 }
}

技術(shù)要點(diǎn):
1. geo指令定義一個(gè)白名單$whiteiplist, 默認(rèn)值為1, 所有都受限制。 如果客戶端ip與白名單列出的ip相匹配,則$whiteiplist值為0也就是不受限制。
2. map指令是將$whiteiplist值為1的,也就是受限制的ip,映射為客戶端ip。將$whiteiplist值為0的,也就是白名單ip,映射為空的字符串。
3. limit_conn_zone和limit_req_zone指令對于鍵為空值的將會被忽略,從而實(shí)現(xiàn)對于列出來的ip不做限制。
測試方法:

# ab -c 100 -n 300 http://test.ttlsa.com:8080/ttlsa.com/docs/pdf/nginx_guide.pdf

到此,關(guān)于“Nginx服務(wù)器中map模塊怎么配置與使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI