最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nginx location中多個if里面proxy_pass的方法

 更新時間:2020年11月11日 09:59:35   作者:趕路人兒  
這篇文章主要介紹了nginx location中多個if里面proxy_pass的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1、首先我們回顧一下nginx中l(wèi)ocation的相關知識

1)location的匹配指令:

  • ~      #波浪線表示執(zhí)行一個正則匹配,區(qū)分大小寫
  • ~*    #表示執(zhí)行一個正則匹配,不區(qū)分大小寫
  • ^~    #^~表示普通字符匹配,不是正則匹配。如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄
  • =      #進行普通字符精確匹配
  • @     #"@" 定義一個命名的 location,使用在內部定向時,例如 error_page, try_files

2)location 匹配的優(yōu)先級(與location在配置文件中的順序無關)

1.= 精確匹配會第一個被處理。如果發(fā)現精確匹配,nginx停止搜索其他匹配。
2.普通字符匹配,正則表達式規(guī)則和長的塊規(guī)則將被優(yōu)先和查詢匹配,也就是說如果該項匹配還需去看有沒有正則表達式匹配和更長的匹配。
3.^~ 則只匹配該規(guī)則,nginx停止搜索其他匹配,否則nginx會繼續(xù)處理其他location指令。
4.最后匹配理帶有"~"和"~*"的指令,如果找到相應的匹配,則nginx停止搜索其他匹配;當沒有正則表達式或者沒有正則表達式被匹配的情況下,那么匹配程度最高的逐字匹配指令會被使用。

2、nginx多個if里面proxy_pass:

server {
listen 127.0.0.1:80;
    set $test A; 
  
    set $testB B;
    location / {
      if ($test ~* "A") { 
         proxy_pass http://www.so.com; 
         break; 
      } 
      if ($testB ~* "B") { 
         proxy_pass http://www.sogou.com; 
         #break; 
      } 
    }
}

希望滿足某個條件的時候,走某個proxy_pass。但是如果多個if都滿足,比如上例中的情況:在第一個if中沒有break的時候,就會執(zhí)行下面的;為了第一個匹配上之后就執(zhí)行proxy_pass,可以加上break。(在nginx中貌似沒有if else這樣的指令)

3、判斷參數進行不同的proxy_pass:

rewrite只能通過url路徑進行匹配,不能進行參數匹配,所以如果要實現參數的判斷需要用$arg_parameter。

location / {
    root  html;
    index  index.html index.htm index.php;
    proxy_redirect   off;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  Host $http_host;
    proxy_http_version 1.1;
    proxy_set_header  Connection "";

    if ( $query_string ~* "usg=0" ) {
      proxy_pass   http://local_workera;
    }

    if ( $query_string ~* "usg=1" ) {
      proxy_pass   http://local_workerb;
    }

    if ( $arg_uid ~* "(.*[AB]$)" ) {
  proxy_pass   http://local_workerf;
    }

    proxy_pass  http://local_workera;
}

1)請求路徑中的usg=0和usg=1這兩個參數是確定的,所以使用了$query_string進行正則匹配即可;($query_string的值是請求中所有參數)

2)接下來,我們想對uid的值如果是以A、B結尾的請求,轉向local_workerf處理,這時候就無法用$query_string進行正則匹配了;(因為對于/?uid=1A&t=1&usg=1和/?uid=123&t=A&usg=0 不太好匹配)這時,只能用$arg_uid進行正則匹配了。

3)由于usg=0和usg=2這兩個參數是互斥的,所以根據上面location中if指令的邏輯,不用break也可以正確處理,且放到最上面。對于uid的匹配,由于會和usg進行沖突,所以只能放到最下面或者加break,即:

location / {
    root  html;
    index  index.html index.htm index.php;
    proxy_redirect   off;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  Host $http_host;
    proxy_http_version 1.1;
    proxy_set_header  Connection "";
 
 if ( $arg_uid ~* "(.*[AB]$)" ) {
  proxy_pass   http://local_workerf;
  break;
    }

    if ( $query_string ~* "usg=0" ) {
      proxy_pass   http://local_workera;
    }

    if ( $query_string ~* "usg=1" ) {
      proxy_pass   http://local_workerb;
    }

    proxy_pass  http://local_workera;
}

到此這篇關于nginx location中多個if里面proxy_pass的方法的文章就介紹到這了,更多相關nginx location proxy_pass內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用Nginx限制IP請求和并發(fā)連接數的實現方法

    使用Nginx限制IP請求和并發(fā)連接數的實現方法

    本文主要介紹了使用Nginx限制IP請求和并發(fā)連接數的實現方法,通過使用Nginx的限制模塊,我們可以輕松地實現對IP請求和并發(fā)連接數的限制,具體就跟小編一起來了解一下
    2024-03-03
  • nginx配置https的方法示例(免費證書)

    nginx配置https的方法示例(免費證書)

    這篇文章主要介紹了nginx配置https的方法示例(免費證書),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • nginx添加nginx-sticky-module模塊步驟的實現

    nginx添加nginx-sticky-module模塊步驟的實現

    nginx-sticky-module模塊是nginx實現負載均衡的一種方案,和ip_hash負載均衡算法會有區(qū)別的,本文主要介紹了nginx添加nginx-sticky-module模塊步驟的實現,感興趣的可以了解一下
    2023-08-08
  • 你知道Nginx嗎,利用Nginx反向代理的操作方法

    你知道Nginx嗎,利用Nginx反向代理的操作方法

    Nginx是一個高性能的HTTP和反向代理服務器,可以用于反向代理,客戶端只與Nginx交互,而不知道后端服務器的存在,以下是一個簡單的Nginx反向代理配置示例,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Nginx中server_name的超詳細使用指南

    Nginx中server_name的超詳細使用指南

    這篇文章主要介紹了Nginx的server_name指令及其在DNS解析和多域名配置中的應用,包括如何使用通配符和正則表達式進行匹配,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-03-03
  • Nginx開啟stub_status模塊配置方法

    Nginx開啟stub_status模塊配置方法

    這篇文章主要介紹了Nginx開啟stub_status模塊配置方法,Nginx中的stub_status模塊主要用于查看Nginx的一些狀態(tài)信息,本文講解它的開啟配置方法,需要的朋友可以參考下
    2015-02-02
  • 在服務器上啟用HTTPS的詳細教程

    在服務器上啟用HTTPS的詳細教程

    這篇文章主要介紹了在服務器上啟用HTTPS的詳細教程,包括在AWS中生成SSL證書以及在Nginx上的相關配置等,極力推薦!需要的朋友可以參考下
    2015-06-06
  • Nginx如何封禁IP和IP段的實現

    Nginx如何封禁IP和IP段的實現

    這篇文章主要介紹了Nginx如何封禁IP和IP段的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • nginx修改server信息的方法詳解

    nginx修改server信息的方法詳解

    請求響應信息會暴露nginx版本信息,若攻擊者獲知服務器組件等信息及版本信息,會使下一步的攻擊和漏洞測試提供便利,所以本文給大家介紹了nginx修改server信息的方法,需要的朋友可以參考下
    2025-02-02
  • 如何讓Nginx快速支持TLS1.3協(xié)議詳解

    如何讓Nginx快速支持TLS1.3協(xié)議詳解

    這篇文章主要給大家介紹了如何讓Nginx快速支持TLS1.3協(xié)議的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-04-04

最新評論

营口市| 民勤县| 开江县| 玛沁县| 高阳县| 定远县| 徐闻县| 博爱县| 余庆县| 京山县| 晋江市| 盖州市| 远安县| 吉安县| 长春市| 成安县| 景洪市| 明光市| 哈巴河县| 叙永县| 磐石市| 思南县| 乐陵市| 盘锦市| 克什克腾旗| 礼泉县| 尚志市| 桂林市| 建水县| 潍坊市| 西宁市| 遵化市| 桦川县| 鄢陵县| 兴城市| 浦北县| 新津县| 翁源县| 夏邑县| 龙州县| 成武县|