中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

nginx location中如何使用proxy_pass方法

發布時間:2020-11-12 15:01:30 來源:億速云 閱讀:884 作者:Leah 欄目:開發技術

這篇文章給大家介紹nginx location中如何使用proxy_pass方法,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

1、首先我們回顧一下nginx中location的相關知識

1)location的匹配指令:

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

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

1.= 精確匹配會第一個被處理。如果發現精確匹配,nginx停止搜索其他匹配。
2.普通字符匹配,正則表達式規則和長的塊規則將被優先和查詢匹配,也就是說如果該項匹配還需去看有沒有正則表達式匹配和更長的匹配。
3.^~ 則只匹配該規則,nginx停止搜索其他匹配,否則nginx會繼續處理其他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的時候,就會執行下面的;為了第一個匹配上之后就執行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中如何使用proxy_pass方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长治市| 侯马市| 军事| 宝应县| 商城县| 黔西| 隆德县| 江北区| 大埔县| 茌平县| 寿阳县| 大理市| 余干县| 泾源县| 巢湖市| 澄江县| 奈曼旗| 兴安县| 体育| 盐城市| 阳信县| 曲松县| 太谷县| 平潭县| 合江县| 康马县| 璧山县| 吴川市| 远安县| 烟台市| 界首市| 如皋市| 新河县| 清原| 徐闻县| 上栗县| 同德县| 武陟县| 集安市| 恭城| 元谋县|