国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

nginx http rewrite module 詳解

這篇具有很好參考價(jià)值的文章主要介紹了nginx http rewrite module 詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

大家好,我是 17。

今天和大家聊聊 nginx http rewrite module 。

簡(jiǎn)單來(lái)說(shuō), ngx_http_rewrite_module module 用正則匹配請(qǐng)求,改寫(xiě)請(qǐng)求,然后做跳轉(zhuǎn)。可以是內(nèi)部跳轉(zhuǎn),也可以是外部跳轉(zhuǎn)。

學(xué)習(xí)這個(gè)模塊的時(shí)候,把 rewrite_log 打開(kāi),可以在 error log 里查看跳轉(zhuǎn)信息

 rewrite_log on; 
 error_log /home/log/test-error.log notice;

注意 notice 是必須的

順序執(zhí)行和循環(huán)跳轉(zhuǎn)

  1. 直接寫(xiě)在 server level 的 指令,順序執(zhí)行。
  2. 寫(xiě)在 location 中的指定順序執(zhí)行??梢蕴狡渌?location ,最多不超過(guò) 10次。
server{
    rewrite ^/users/(.*)$ /show?user=$1 ;
    rewrite ^/teachers/(.*)$ /show?teacher=$1 ;
}

請(qǐng)求 /users/1 ,先執(zhí)行第一條 rewrite ^/users/(.*)$ /show?user=$1
再執(zhí)行第二條 rewrite ^/teachers/(.*)$ /show?teacher=$1 ; 雖然第一條匹配到了,還是會(huì)執(zhí)行第二條。這就是順序執(zhí)行的意思。

location /{
    rewrite ^/teachers/(.*)$ /show/$1;
    rewrite ^/users/(.*) /show/$1;
}
location /show/{
    rewrite ^/show/(.*)$ /users/$1 ;
}

請(qǐng)求 /users/1,命中第一個(gè)location 。順序執(zhí)行第一個(gè) rewrite,沒(méi)命中,即使命中也會(huì)繼續(xù)執(zhí)行第二 rewrite ,命中。執(zhí)行 rewirte 指令跳轉(zhuǎn)到第二個(gè)location /show/,執(zhí)行 rewirte 又回跳回 / ,這樣循環(huán)10次,報(bào) 500 錯(cuò)誤,查看 error 日志可以看到說(shuō)明。

rewrite or internal redirection cycle while processing "/show/1"

這個(gè)過(guò)程演示了 location 中 rewrite 的執(zhí)行邏輯。順序執(zhí)行,循環(huán)跳轉(zhuǎn)。

rewrite module 中還有 5 個(gè)指令 break, if, return, rewrite, and set。

return

return 可以直接返回,打斷后面的 rewrite module 指令的執(zhí)行。

location / {
 return 409;
 rewrite ^/teachers/(.*)$ /show/$1;
}

執(zhí)行 return 后,后面的指令就沒(méi)有機(jī)會(huì)執(zhí)行了。

return code [text];
return code URL;
return URL;
location /admin/{
    return 403 '沒(méi)有訪問(wèn)權(quán)限';
}
location / {
    return 302 $scheme://www.baidu.com$request_uri;
}

location /abc/{
    return 404;
}

set,break 比較簡(jiǎn)單,和其它語(yǔ)言差不多。下面著重講下 rewirte 指令的 flag。

rewrite 指令的 flag

rewrite regex replacement [flag]

flag有四種

  • last 停止執(zhí)行后面的 ngx_http_rewrite_module 指令,并發(fā)起新的 location 匹配。
  • break 停止執(zhí)行后面的 ngx_http_rewrite_module 指令,然后沒(méi)有后續(xù)了,不再發(fā)起 location 匹配。
  • redirect 執(zhí)行 302跳轉(zhuǎn),后面的指令不再執(zhí)行。
  • permanent 執(zhí)行 301跳轉(zhuǎn),后面的指令不再執(zhí)行。

last、break 停止執(zhí)行的是 ngx_http_rewrite_module 指令,其它指令不受影響,還是會(huì)執(zhí)行的。

regex 匹配的是路徑部分

location / {
   rewrite ^/teacher/(.*)$ /show1/$1 last;
   rewrite ^/teacher/(.*) /show2/$1;
}
location /show1{
 return 900;
}
location /show2{
 return 901;
}

curl http://localhost:3000/teacher/1
HTTP/1.1 900

因?yàn)?last 會(huì)終止后面的  ngx_http_rewrite_module 指令,所以 第二句 rewrite ^/teacher/(.*) /show2/$1 不會(huì)執(zhí)行。第一句執(zhí)行完后,跳到 /show1,返回 900

如果把 last 換成  break
HTTP/1.1 404

因?yàn)?break 不再執(zhí)行跳轉(zhuǎn),直接查找 show1/1 找不到,報(bào) 404.

把 last 換成 redirect.
HTTP/1.1 302 

瀏覽器會(huì)請(qǐng)求兩次。

把 last 換成 permanent.
HTTP/1.1 301 

瀏覽器會(huì)請(qǐng)求兩次。

如果 replacement 是 http開(kāi)頭,是可以直接跳轉(zhuǎn)的

location / {
  rewrite ^/teacher/ http://juejin.cn
}

curl http://localhost:3000/teacher/1
HTTP/1.1 302 
Location: http://juejin.cn

相當(dāng)于 redirect 指令的效果。

if 語(yǔ)句

if 語(yǔ)句不復(fù)雜,但是非常有用,可以這樣說(shuō),用 if 可以實(shí)現(xiàn)很多指令,但是用內(nèi)置指令更簡(jiǎn)潔,還是要優(yōu)先用指令。

if ($param) 如果 $param 為空字符串或 0 為假,其它情況為真。

注意 if 后面必須要有空格,否則報(bào)錯(cuò)。

set $param '0';
set $param 0;
set $param '';

這三種寫(xiě)法 $param 都為假,其它情況都為真

用 = ,!=判斷相等。

 if ($request_method = POST){
      return 403;
 }

注意 是一個(gè) = 不是兩個(gè)=, 等號(hào)左右必須要有空格,否則報(bào)錯(cuò)

用正則表達(dá)式判斷

~ 區(qū)分大小寫(xiě)
if ($http_user_agent ~ mobile)

~* 不區(qū)分大小寫(xiě)
if ($http_referer ~* juejin\.cn)

!~ 和 !~* 是對(duì)應(yīng)的兩個(gè)否定寫(xiě)法,不再舉例了。

用 flag

-f !-f  文件是否存在
if (-f $request_filename)
if (!-f $request_filename)

-d !-d 目錄是否存在
-e !-e 文件或目錄是否存在
-x !-e 是否可執(zhí)行


## url 美化
http rewrite 一個(gè)應(yīng)用就是 url 美化。
我們?cè)陂_(kāi)發(fā)的時(shí)候用的 url 是這樣的 

/users?id=1

讓別人訪問(wèn)的時(shí)候可能是這樣的

/users/1

所以我們需要把 `/users/1` 轉(zhuǎn)為 `/users?id=1` ,這時(shí)就需要 rewrite 出場(chǎng)了。

location /users/{
rewrite ^/users/(.*)$ /nodejs/id=$1? last;
}
location /nodejs/{
proxy_pass http://127.0.0.1:3000;
}文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-402653.html

當(dāng)請(qǐng)求`/users/1` 的時(shí)候,命中 location /users/ ,執(zhí)行rewrite 指令, last flag 指示停止后面的rewrite 指令并做內(nèi)部跳轉(zhuǎn),匹配到 location /nodejs/ ,經(jīng)過(guò) proxy_pass 指令,轉(zhuǎn)到 /nodejs/ 。

到了這里,關(guān)于nginx http rewrite module 詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【雜談】聊聊我是如何從Java轉(zhuǎn)入Web3的

    ? ? ? ? 我先說(shuō)說(shuō)我基本的一個(gè)情況吧: ????????我是之前是一位從業(yè)了傳統(tǒng)web2行業(yè)三年的Java開(kāi)發(fā),在2018年尾才開(kāi)始去關(guān)注區(qū)塊鏈的,之前雖然也有混跡在幣圈,但是沒(méi)怎么關(guān)注到幣圈的內(nèi)在運(yùn)行邏輯。 ? ? ? ? 后面因?yàn)楫?dāng)時(shí)元宇宙和Web3的概念特別火,也可能是不滿足

    2024年02月13日
    瀏覽(25)
  • Linux安裝Nginx并集成nginx-http-flv-module

    下載 Nginx:?https://nginx.org/download nginx-http-flv-module:?https://github.com/winshining/nginx-http-flv-module nginx可自行選擇版本下載 ,nginx-http-flv-module可以通過(guò)git下載 解壓安裝 查找nginx安裝目錄 修改成如下配置 啟動(dòng) cd ../sbin ./nginx

    2024年02月15日
    瀏覽(26)
  • Nginx + RTMP + nginx-http-flv-module 環(huán)境搭建(CentOS 7)

    Nginx + RTMP + nginx-http-flv-module 環(huán)境搭建(CentOS 7)

    ??Nginx + RTMP + nginx-http-flv-module 環(huán)境搭建(CentOS 7) ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒?? ?博客主頁(yè):IT·陳寒的博客 ??該系列文章專欄:Java學(xué)習(xí)路線 ??其他專欄:Java學(xué)習(xí)路線 Java面試技巧 Java實(shí)戰(zhàn)項(xiàng)目 AIGC人工智能 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) ??文章作者技術(shù)和水平有限,如果文中出現(xiàn)

    2024年02月05日
    瀏覽(49)
  • nginx下添加http_ssl_module并且配置域名,指定端口

    1.切換到源碼包: 2.進(jìn)行編譯: 3.配置完成后,運(yùn)行命令: make命令執(zhí)行后,不要進(jìn)行make install,否則會(huì)覆蓋安裝。 4.備份原有已安裝好的nginx: 5.停止nginx狀態(tài): 6.將編譯好的nginx覆蓋掉原有的nginx: 7.提示是否覆蓋,輸入yes即可。 8.然后啟動(dòng)nginx: 9.進(jìn)入nginx/sbin目錄下,通過(guò)

    2024年02月11日
    瀏覽(32)
  • Nginx ngx_http_auth_request_module模塊鑒權(quán)

    Nginx ngx_http_auth_request_module模塊鑒權(quán)

    ngx_http_auth_request_module 模塊 實(shí)現(xiàn)了基于一子請(qǐng)求的結(jié)果的客戶端的授權(quán)。如果子請(qǐng)求返回2xx響應(yīng)碼,則允許訪問(wèn)。如果它返回401或403,則訪問(wèn)被拒絕并顯示相應(yīng)的錯(cuò)誤代碼。子請(qǐng)求返回的任何其他響應(yīng)代碼都被認(rèn)為是錯(cuò)誤的。 auth_request 使用的也是 subrequest 進(jìn)行子請(qǐng)求。 當(dāng)我

    2024年02月17日
    瀏覽(20)
  • nginx rewrite 用法,用rewrite去除URL中的特定參數(shù)

    日常服務(wù)中經(jīng)常會(huì)用Nginx做一層代理轉(zhuǎn)發(fā),把Nginx當(dāng)做前置機(jī) 比如,以下配置: 這里的rewrite 就是為了去除URL中的/apis,實(shí)際的后端api中是沒(méi)有這個(gè)參數(shù)的,但是為了做到在Nginx轉(zhuǎn)發(fā)請(qǐng)求,前端需要加上這個(gè)參數(shù),以便于區(qū)別 比如前端的請(qǐng)求地址是 那么實(shí)際上經(jīng)過(guò)Nginx轉(zhuǎn)發(fā)后請(qǐng)求

    2024年02月05日
    瀏覽(21)
  • NGINX編譯ngx_http_proxy_connect_module及做正向代理

    NGINX編譯ngx_http_proxy_connect_module及做正向代理

    1、下載NGINX(網(wǎng)址:http://nginx.org/download/ 當(dāng)前文檔使用版本為1.22.1)及ngx_http_proxy_connect_module模塊 [root@localhost work]# tar xzf nginx-1.22.1.tar.gz [root@localhost work]# cd nginx-1.22.1 [root@localhost nginx-1.22.1]# git clone https://gitee.com/web_design_of_web_frontend/ngx_http_proxy_connect_module.git 2、下載該模塊的補(bǔ)

    2024年02月13日
    瀏覽(27)
  • Nginx服務(wù)之Rewrite

    Nginx服務(wù)之Rewrite

    目錄 一、Rewrite實(shí)際場(chǎng)景 1、Nginx跳轉(zhuǎn)需求的實(shí)現(xiàn)方式 2、rewrite放在server{},if{}, location{}段中 3、對(duì)域名或參數(shù)字符串 二、Nginx 正則表達(dá)式 三、Rewrite命令 四、Location 分類 1、分類? 2、正則匹配的常用表達(dá)式 3、location 優(yōu)先級(jí) 4、Nginx在實(shí)際網(wǎng)站中至少有三個(gè)匹配規(guī)則定義 4.1第

    2024年02月14日
    瀏覽(23)
  • 8.Nginx Rewrite

    8.Nginx Rewrite

    從功能看rewrite和location似乎有點(diǎn)像,都能實(shí)現(xiàn)跳轉(zhuǎn)。 主要區(qū)別在于rewrite是在同一域名內(nèi)更改獲取資源的路徑,而location是對(duì)一類路徑做控制訪問(wèn)或反向代理,還可以proxy_pass到其他機(jī)器 rewrite對(duì)訪問(wèn)的域名或者域名內(nèi)的URL路徑地址重寫(xiě) location對(duì)訪問(wèn)的路徑做訪問(wèn)控制或者代理轉(zhuǎn)

    2024年02月08日
    瀏覽(16)
  • Nginx重寫(xiě)功能rewrite

    目錄 一、Rewrite簡(jiǎn)單介紹 1、Rewrite的概述 2、Rewrite跳轉(zhuǎn)場(chǎng)景 3、URI、URL、URN 4、Rewrite跳轉(zhuǎn)實(shí)現(xiàn) 5、Rewrite實(shí)際場(chǎng)景? 6、Nginx正則表達(dá)式 7、Rewrite執(zhí)行順序 二、location簡(jiǎn)單介紹 1、location的分類 2、location 常用的匹配規(guī)則 3、location的優(yōu)先級(jí) 4、location示例說(shuō)明 5、實(shí)際網(wǎng)站使用中,至

    2024年02月08日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包