亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

shiweifu / 3535人閱讀

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

原文鏈接:https://blog.tanteng.me/2016/... ,原文內容會不斷完善,以原文為準。

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

關于 User Agent

User Agent 中文名為用戶代理,簡稱 UA,它是一個特殊字符串頭,使得服務器能夠識別客戶使用的操作系統(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

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

比如新增一個自己的 UA,并加上自己的標識,如圖:

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

Nginx 配置匹配 User-Agent

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

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

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

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

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

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

map 指令正則匹配

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

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

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

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

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

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

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

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

返回結果:
http_user_agent:curl/7.35.0
user:curl

在瀏覽器中訪問,輸出結果是:

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

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

Nginx 根據不同的 UA 設置網站根目錄

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

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 行,網站目錄可以用 $user 變量來表示。比如測試人員 ruike,他修改自己的 UA 后面加上 ruike,那么訪問的網站根目錄是 /usr/share/nginx/html/ruike/public,這樣不同的測試人員在自己的各自目錄拉取代碼,互不影響,支持同時進行測試。

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

切換到 ruike 這個 UA,訪問網站,顯示的即是以上內容,切換回 tanteng 這個 UA,顯示的是正常的網站內容,這就達到了通過 UA 自定義值設置不同的網站根目錄的效果,也就支持了一臺測試機支持不同的測試人員同時進行測試的需求。

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

轉載請注明本文地址:http://www.ezyhdfw.cn/yun/39352.html

相關文章

  • Nginx 配置學習筆記

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

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

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

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

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

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

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

    kevin 評論0 收藏0

發(fā)表評論

0條評論

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