成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

在nginx location中用alias代理文件

MockingBird / 1984人閱讀

摘要:最終代理路徑是路徑部分和瀏覽器輸入的未匹配到的部分。其中只有,直接返回。瀏覽器因此,代理目錄時(shí),還是正則匹配的話,是無(wú)法訪問(wèn)到這個(gè)目錄下的各個(gè)文件的。關(guān)于既想用又想能代理到某目錄下各個(gè)文件的解決辦法方案方案用結(jié)合代替

介紹nginx中l(wèi)ocation塊的匹配符(~, ~*, ^~, [space]等)與alias文件代理的關(guān)系

實(shí)驗(yàn)環(huán)境
靜態(tài)資源目錄

E: /static

a.js

b.js

/case/

c.js

d.js

e.js

nginx server塊
server {
    listen       80;
    server_name  127.0.0.1;
}
alias代理特定文件

僅僅代理一個(gè)特定的文件,基本上很少會(huì)出錯(cuò),
location塊是前綴匹配和正則匹配均可。
如下,瀏覽器訪問(wèn)http://127.0.0.1/static/case/... 都返回c.js的內(nèi)容。

    location /static/case/c.js {
        alias E:/static/case/c.js;
    }
    location ~ /static/case/c.js {
        alias E:/static/case/c.js;
    }
alias代理某目錄下的各個(gè)文件

但當(dāng)需要代理一個(gè)目錄下的各個(gè)文件時(shí),會(huì)因location塊是前綴匹配和正則匹配的不同,導(dǎo)致代理的結(jié)果不同。
尤其是location是正則匹配時(shí),較為特殊,容易出錯(cuò)。

location是前綴匹配^~或者[space]時(shí)

這種情況如果出錯(cuò),一般就是由于對(duì)location URI部分和alias部分最后加不加“/”犯糊涂導(dǎo)致的,
或者說(shuō)是不清楚這種情況下最終代理到什么path導(dǎo)致的。

// case1
location /static/case/ {
    alias E:/static/case/;
    autoindex on;
}
// case2
location /static/case {
    alias E:/static/case/;
    autoindex on;
}
case3
location /static/case/ {
    alias E:/static/case;
    autoindex on;
}
case4
location /static/case {
    alias E:/static/case;
    autoindex on;
}

以上四種情況,瀏覽器輸入:http://127.0.0.1/static/case/... 只有第三種失敗。
如果在這四種情況的location前面都加上 ^~ 結(jié)果也是一樣的,因?yàn)?^~ 和[space]都是前綴匹配。

**最終代理路徑是: alias路徑 + location部分URI和瀏覽器輸入的URL未匹配到的部分。
這個(gè)路徑下有文件,就200,沒(méi)有文件,就404。**
所以分析一下為什么第三種寫法不能正確代理呢,
瀏覽器URL: http://127.0.0.1/static/case/...,
location:/static/case/,
因此兩個(gè)URL匹配部分是/static/case/,
未匹配部分是c.js。
因此它最終代理的path是:E:/static/case + c.js = E:/static/casec.js,相當(dāng)于找static目錄下有沒(méi)有casec.js文件,因?yàn)闆](méi)這個(gè)文件,所以404。

location是正則匹配~, ~*時(shí)
    location ~ /static/case/ {
        alias E:/static/case/;
        autoindex on;
    }

瀏覽器URL1:http://127.0.0.1/static/case/...
瀏覽器URL2:http://127.0.0.1/static/case/...
瀏覽器URL3:http://127.0.0.1/static/case/...
瀏覽器URL4:http://127.0.0.1/static/case/,
結(jié)果都是一樣的,返回/static/case目錄。
其中只有URL4,直接200返回。URL1-3都是301->200。

重定向不是無(wú)限的,當(dāng)瀏覽器URL case后的層級(jí)大于10時(shí),就不再301->200,而是直接200返回。
即,瀏覽器URL5,直接200返回。代理到/static/case目錄。
瀏覽器URL5:http://127.0.0.1/static/case/...

因此,代理目錄時(shí),location還是正則匹配的話,是無(wú)法訪問(wèn)到這個(gè)目錄下的各個(gè)文件的。

解決辦法有兩個(gè)。

    關(guān)于既想用~又想能代理到某目錄下各個(gè)文件的解決辦法:
    //方案1
    location ~ ^/(.+)/(.+)/(.+.js)$ {
        alias E:/static/case/$3;
    }
    //方案2、用root結(jié)合rewrite代替
    location ~ ^/.+/.+/.+.js$ {
        root E:/;
        rewrite ^/(.*) /$1 break;
    }

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40240.html

相關(guān)文章

  • 開發(fā)環(huán)境下使用nginx重寫uri及代理功能

    摘要:本文同步在個(gè)人博客上,歡迎關(guān)注這篇文章整理了在前端開發(fā)中,在開發(fā)環(huán)境下使用重寫及代理功能的方法。表示該規(guī)則是使用正則定義的,區(qū)分大小寫。因此牢記在上下文中使用,而在上下文中使用。 本文同步在個(gè)人博客shymean.com上,歡迎關(guān)注 這篇文章整理了在前端開發(fā)中,在開發(fā)環(huán)境下使用nginx重寫uri及代理功能的方法。 參考 nginx中文文檔 前端開發(fā)者必備的 Nginx 知識(shí) Ngin...

    LMou 評(píng)論0 收藏0
  • 前端培訓(xùn)-初級(jí)階段-場(chǎng)景實(shí)戰(zhàn)(2019-06-13)-Nginx代理正確食用方式

    摘要:前端最基礎(chǔ)的就是。我這邊預(yù)期準(zhǔn)備進(jìn)入中級(jí)階段,中間還是會(huì)穿插一些實(shí)戰(zhàn)。語(yǔ)法精確匹配,匹配成功,則停止搜索正則不能有嵌套的。指令會(huì)根據(jù)在配置文件中出現(xiàn)的順序依次執(zhí)行,可以使用來(lái)終止接下來(lái)的處理。如果以或者或者,則停止處理,立刻重定向。 前端最基礎(chǔ)的就是 HTML+CSS+Javascript。掌握了這三門技術(shù)就算入門,但也僅僅是入門,現(xiàn)在前端開發(fā)的定義已經(jīng)遠(yuǎn)遠(yuǎn)不止這些。前端小課堂(HTM...

    Harpsichord1207 評(píng)論0 收藏0
  • 前端培訓(xùn)-初級(jí)階段-場(chǎng)景實(shí)戰(zhàn)(2019-06-13)-Nginx代理正確食用方式

    摘要:前端最基礎(chǔ)的就是。我這邊預(yù)期準(zhǔn)備進(jìn)入中級(jí)階段,中間還是會(huì)穿插一些實(shí)戰(zhàn)。語(yǔ)法精確匹配,匹配成功,則停止搜索正則不能有嵌套的。指令會(huì)根據(jù)在配置文件中出現(xiàn)的順序依次執(zhí)行,可以使用來(lái)終止接下來(lái)的處理。如果以或者或者,則停止處理,立刻重定向。 前端最基礎(chǔ)的就是 HTML+CSS+Javascript。掌握了這三門技術(shù)就算入門,但也僅僅是入門,現(xiàn)在前端開發(fā)的定義已經(jīng)遠(yuǎn)遠(yuǎn)不止這些。前端小課堂(HTM...

    seanHai 評(píng)論0 收藏0
  • Nginx反向代理解決前后端聯(lián)調(diào)跨域問(wèn)題

    摘要:反向代理前后端聯(lián)調(diào)跨域什么是跨域跨域,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。這時(shí)候,用反向代理實(shí)現(xiàn)跨域,是最簡(jiǎn)單的跨域方式。 keywords: Nginx反向代理 前后端聯(lián)調(diào) 跨域 1.什么是跨域 跨域,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對(duì)javascript施加的安全限制。 所謂同源是指,域名,協(xié)議,端口都相同。瀏覽器執(zhí)行javascrip...

    QiuyueZhong 評(píng)論0 收藏0
  • Nginxalias 和 root的區(qū)別)

    摘要:和的區(qū)別和的區(qū)別訪問(wèn)一個(gè)文件時(shí),顯示的路徑是訪問(wèn)一個(gè)文件時(shí),顯示的路徑是也就是差異在沒(méi)顯示后面的路徑想要獲取用戶的真實(shí)因?yàn)榻?jīng)過(guò)多層代理后,用戶的真實(shí)會(huì)被代理覆蓋掉的,所以在第一個(gè)代理服務(wù)器中設(shè)置并在最后一個(gè)代理服務(wù)器獲取這樣就可以直接在里執(zhí) Nginx(alias 和 root的區(qū)別)1.alias 和 root 的區(qū)別: location /request_path/image { ...

    Lyux 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<