国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用 Nginx map 指令匹配 User Agent 自定義值

shiweifu / 3386人閱讀

摘要:指令正則匹配指令使用模塊提供的,模塊可以創(chuàng)建變量,這些變量的值與另外的變量值相關(guān)聯(lián)。根據(jù)不同的設(shè)置網(wǎng)站根目錄通過指令獲取到自定義值后,可以做如下設(shè)置,讓不同的測試人員對應(yīng)不同的網(wǎng)站根目錄這里行,網(wǎng)站目錄可以用變量來表示。

原文鏈接:https://blog.tanteng.me/2016/... ,原文內(nèi)容會不斷完善,以原文為準(zhǔn)。

本文介紹有關(guān) User-Agent 的知識,以及使用 Nginx map 指令配合正則表達(dá)式匹配 User Agent 自定義值,通過捕獲 UA 自定義值,可以做很多事情,其中一個(gè)場景是:讓一臺測試機(jī)支持多個(gè)測試同時(shí)測試一個(gè)項(xiàng)目,原理就是匹配 UA 值,設(shè)置不同的 WEB 根目錄。

關(guān)于 User Agent

User Agent 中文名為用戶代理,簡稱 UA,它是一個(gè)特殊字符串頭,使得服務(wù)器能夠識別客戶使用的操作系統(tǒng)及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。

用 Firefox的 Firebug 工具可以看到每次請求的請求頭信息都包含 User-Agent 字段,如圖所示:

通過查看 nginx 的請求日志如 access.log,也可以查看到每次請求的 UA 信息,如果是 curl 命令方式請求,可以看到 UA 信息是 curl:

192.168.10.1 – – [10/Oct/2016:02:42:59 +0000] “GET /hello HTTP/1.1” 200 18 “-” “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0 tanteng”
127.0.0.1 – – [10/Oct/2016:02:43:23 +0000] “GET /hello HTTP/1.1” 200 22 “-” “curl/7.35.0”

Firefox 插件:User Agent Switcher

這個(gè)插件可以管理和切換不同的 User-Agent,比如模擬不同的瀏覽器,或者新增自定義的 UA,可以在 UA 中帶上自己的標(biāo)識。

比如新增一個(gè)自己的 UA,并加上自己的標(biāo)識,如圖:

這樣 Firefox 發(fā)出的請求頭信息中 UA 就是這個(gè)修改過后的,訪問一個(gè)本地 WEB 項(xiàng)目,通過 firebug 或查看 nginx 的 access.log 日志,都可以發(fā)現(xiàn)請求 UA 發(fā)生了變化。

Nginx 配置匹配 User-Agent

在 nginx 配置文件中,$http_user_agent 表示 UA 的值,比如瀏覽器默認(rèn) UA 值是:

Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0

現(xiàn)在新增了一個(gè) UA,UA 值是在后面加一個(gè)空格和名字,如:

Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0 tanteng

通過 Firefox 的 User Agent Swicher 這個(gè)插件切換到新的 UA,再通過瀏覽器訪問,UA 就是這個(gè)修改之后的。

那么,在 nginx 中如何匹配這個(gè)最后的名字呢?這里可以用到 nginx 的 map 指令配合正則表達(dá)式。

map 指令正則匹配

map 指令使用 ngx_http_map_module 模塊提供的,ngx_http_map_module 模塊可以創(chuàng)建變量,這些變量的值與另外的變量值相關(guān)聯(lián)。允許分類或者同時(shí)映射多個(gè)值到多個(gè)不同值并儲存到一個(gè)變量中,map 指令用來創(chuàng)建變量,但是僅在變量被接受的時(shí)候執(zhí)行視圖映射操作,對于處理沒有引用變量的請求時(shí),這個(gè)模塊并沒有性能上的缺失。

在 nginx 的 http 域中,增加以下代碼:

map $http_user_agent $user {
    default            "";
    ~curl              curl;
    ~(?[S]+$)   $name;
}

這里正則表達(dá)式 [S]+$ 即匹配最后一個(gè)非空白字符,? 表示要匹配的結(jié)果用 $name 表示。

這個(gè) map 域的意思是,匹配對象是 $http_user_agent,即 UA,默認(rèn) $user 值是空字符串,如果是 curl 開頭的,$user 值就是 curl,如果可以匹配到最后一個(gè)非空字符串,那么 $user 的值就是這個(gè)最后的字符串。

在 server 域中添加如下測試代碼:

location /hello {
    echo http_user_agent:$http_user_agent;
    echo user:$user;
}

執(zhí)行 curl 命令:curl www.tanteng.me/hello

返回結(jié)果:
http_user_agent:curl/7.35.0
user:curl

在瀏覽器中訪問,輸出結(jié)果是:

http_user_agent:Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0 tanteng
user:tanteng

這樣就成功獲取到 UA 后面增加的一個(gè)值。

Nginx 根據(jù)不同的 UA 設(shè)置網(wǎng)站根目錄

通過 map 指令獲取到 UA 自定義值后,可以做如下設(shè)置,讓不同的測試人員對應(yīng)不同的網(wǎng)站根目錄:

location ~ .php$ {
    try_files      $uri =404;
    root           /usr/share/nginx/html/$user/public;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

這里 root 行,網(wǎng)站目錄可以用 $user 變量來表示。比如測試人員 ruike,他修改自己的 UA 后面加上 ruike,那么訪問的網(wǎng)站根目錄是 /usr/share/nginx/html/ruike/public,這樣不同的測試人員在自己的各自目錄拉取代碼,互不影響,支持同時(shí)進(jìn)行測試。

測試一下效果,把 public 下的 index.php 文件前面用 echo ‘wo shi ruike.’;exit; 輸出。

切換到 ruike 這個(gè) UA,訪問網(wǎng)站,顯示的即是以上內(nèi)容,切換回 tanteng 這個(gè) UA,顯示的是正常的網(wǎng)站內(nèi)容,這就達(dá)到了通過 UA 自定義值設(shè)置不同的網(wǎng)站根目錄的效果,也就支持了一臺測試機(jī)支持不同的測試人員同時(shí)進(jìn)行測試的需求。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/39352.html

相關(guān)文章

  • Nginx 配置學(xué)習(xí)筆記

    摘要:上面的代碼中定義了一個(gè)名為的負(fù)載均衡器,里面有三個(gè)后端服務(wù),他們是按的方式進(jìn)行輪詢的。在模塊中,可以設(shè)置后端服務(wù)器的信息,同時(shí)還可以設(shè)定每個(gè)后端服務(wù)器在負(fù)載均衡調(diào)度中的狀態(tài)。常用的狀態(tài)有表示當(dāng)前的暫時(shí)不參與負(fù)載均衡。 最近在學(xué)習(xí)如何對 Nginx 進(jìn)行配置,故而對 Nginx 的配置文件的結(jié)構(gòu)功能有了一些新的認(rèn)識。剛開始接觸 Nginx 時(shí),感覺它的配置十分高深、難以理解,需要配置什么...

    wuyumin 評論0 收藏0
  • 從一份配置清單詳解Nginx服務(wù)器配置

    摘要:在本文中,我們繼續(xù)延續(xù)前文,從前文給出的一份示例配置清單開始,詳解一下服務(wù)器的各種配置指令的作用和用法。是否允許同時(shí)接收多個(gè)網(wǎng)絡(luò)連接指令格式該指令默認(rèn)為狀態(tài),意指每個(gè)一次只能接收一個(gè)新到達(dá)的網(wǎng)絡(luò)連接。 本文已獲得原作者CodeSheep授權(quán)。showImg(https://segmentfault.com/img/remote/1460000015646704); 概述 在前面《Ngi...

    Achilles 評論0 收藏0
  • 從一份配置清單詳解Nginx服務(wù)器配置

    摘要:在本文中,我們繼續(xù)延續(xù)前文,從前文給出的一份示例配置清單開始,詳解一下服務(wù)器的各種配置指令的作用和用法。是否允許同時(shí)接收多個(gè)網(wǎng)絡(luò)連接指令格式該指令默認(rèn)為狀態(tài),意指每個(gè)一次只能接收一個(gè)新到達(dá)的網(wǎng)絡(luò)連接。 本文已獲得原作者CodeSheep授權(quán)。showImg(https://segmentfault.com/img/remote/1460000015646704); 概述 在前面《Ngi...

    Fourierr 評論0 收藏0
  • 從一份配置清單詳解Nginx服務(wù)器配置

    摘要:在本文中,我們繼續(xù)延續(xù)前文,從前文給出的一份示例配置清單開始,詳解一下服務(wù)器的各種配置指令的作用和用法。是否允許同時(shí)接收多個(gè)網(wǎng)絡(luò)連接指令格式該指令默認(rèn)為狀態(tài),意指每個(gè)一次只能接收一個(gè)新到達(dá)的網(wǎng)絡(luò)連接。 showImg(https://segmentfault.com/img/remote/1460000015385948); 概述 在前面《Nginx服務(wù)器開箱體驗(yàn)》 一文中我們從開箱...

    kevin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<